Trigger
指定為定義者的使用者 (‘root’@’%’) 不存在
我有一個觸發器定義如下:
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 ;
當我執行該查詢時,我將觸發器創建為
root@localhost
:CREATE DEFINER=`root`@`localhost` TRIGGER `veeva_bi`.`account_ai` AFTER INSERT ON `account` FOR EACH ROW BEGIN // do trigger stuff here END
但是每當我嘗試執行一個以 root 使用者身份連接到 MariaDB 的 PHP 腳本時,我都會收到此錯誤:
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
這是為什麼?我有其他觸發器以相同的方式創建,它們確實有效,但這個沒有,關於此的任何建議或幫助?
我在 mysql 中更新一行時遇到了這個問題。
我連接mysql使用不同的使用者和密碼而不是root。
當我在 mysql 中鍵入“show triggers”時,我發現觸發器使用“root@%”,這將導致此異常。
必須是一種
PROXY
情況。正如MySQL 的文件所說:當通過身份驗證外掛對 MySQL 伺服器進行身份驗證時,外掛可能會請求將連接的(外部)使用者視為不同的使用者以進行權限檢查。這使得外部使用者可以成為第二個使用者的代理;即擁有第二個使用者的權限。換句話說,外部使用者是“代理使用者”(可以冒充或成為另一個使用者的使用者),而第二個使用者是“代理使用者”(其身份可以被代理使用者獲取的使用者) .
跑步:
GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION;
你可以參考@RolandoMySQLDBA 的回答。