J'ai un déclencheur défini comme suit:
USE `veeva_bi`;
DELIMITER $$
DROP TRIGGER IF EXISTS veeva_bi.account_ai$$
USE `veeva_bi`$$
CREATE DEFINER = CURRENT_USER TRIGGER `veeva_bi`.`account_ai` AFTER INSERT ON `account` FOR EACH ROW
BEGIN
// do trigger stuff here
END$$
DELIMITER ;
Lorsque j'exécute cette requête, le déclencheur est créé en tant que root@localhost
:
CREATE DEFINER=`root`@`localhost` TRIGGER `veeva_bi`.`account_ai` AFTER INSERT ON `account` FOR EACH ROW
BEGIN
// do trigger stuff here
END
Mais chaque fois que j'essaie d'exécuter un script PHP, qui se connecte à MariaDB en tant qu'utilisateur root, j'ai cette erreur:
PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1449 The user specified as a definer ('root'@'%') does not exist' in /var/www/html/veeva_replicator/DB.php:158
Pourquoi donc? J'ai d'autres déclencheurs créés de la même manière et ils ont fonctionné mais celui-ci ne fonctionne pas, des conseils ou de l'aide à ce sujet?
Doit être une situation PROXY
. Comme la documentation de MySQL dit:
Lorsque l'authentification sur le serveur MySQL se produit au moyen d'un plug-in d'authentification, le plug-in peut demander que l'utilisateur qui se connecte (externe) soit traité comme un utilisateur différent à des fins de vérification des privilèges. Cela permet à l'utilisateur externe d'être un proxy pour le deuxième utilisateur; c'est-à-dire, d'avoir les privilèges du deuxième utilisateur. En d'autres termes, l'utilisateur externe est un "utilisateur proxy" (un utilisateur qui peut usurper l'identité ou devenir un autre utilisateur) et le deuxième utilisateur est un "utilisateur mandaté" (un utilisateur dont l'identité peut être reprise par un utilisateur proxy). .
Courir:
GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION;
Vous pouvez vous référer à @ RolandoMySQLDBA's réponse .
J'ai rencontré ce problème lors de la mise à jour d'une ligne dans mysql.
Je connecte mysql en utilisant un utilisateur et un mot de passe différents plutôt que root.
Quand je tape "show triggers" dans mysql, j'ai trouvé que le triger utilise "root @%", cela provoquera cette exception.