Trigger

指定為定義者的使用者 (‘root’@’%’) 不存在

  • December 7, 2021

我有一個觸發器定義如下:

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 的回答

引用自:https://dba.stackexchange.com/questions/107536