Cela se produit généralement lors de l'exportation de vues/déclencheurs/procédures d'une base de données ou d'un serveur vers un autre, car l'utilisateur qui a créé cet objet n'existe plus.
Vous avez deux options :
1. Changer le DEFINEUR
C'est peut-être plus facile à faire lors de l'importation initiale de vos objets de base de données, en supprimant tout DEFINER
déclarations du vidage.
Changer le définisseur plus tard est un peu plus délicat :
Comment changer le définisseur pour les vues
-
Exécutez ce SQL pour générer les instructions ALTER nécessaires
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", table_name, " AS ", view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name';
-
Copiez et exécutez les instructions ALTER
Comment changer le définiteur pour les procédures stockées
Exemple :
UPDATE `mysql`.`proc` p SET definer = '[email protected]%' WHERE definer='[email protected]%'
Soyez prudent, car cela modifiera tous les définisseurs pour toutes les bases de données.
2. Créer l'utilisateur manquant
Si vous avez trouvé l'erreur suivante lors de l'utilisation de la base de données MySQL :
The user specified as a definer ('someuser'@'%') does not exist`
Ensuite, vous pouvez le résoudre en utilisant ce qui suit :
GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password'; FLUSH PRIVILEGES;
Depuis http://www .lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html
Cela a fonctionné comme un charme - vous n'avez qu'à changer someuser
au nom de l'utilisateur manquant. Sur un serveur de développement local, vous pouvez généralement simplement utiliser root
.
Déterminez également si vous devez réellement accorder à l'utilisateur ALL
autorisations ou s'ils pouvaient faire avec moins.