次のように定義されたトリガーがあります。
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
しかし、PHPスクリプトを実行しようとするたびに、rootユーザーとしてMariaDBに接続すると、次のエラーが発生します。
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
何故ですか?他のトリガーを同じ方法で作成しましたが、それらは機能しましたが、これは機能しません。これに関するアドバイスやヘルプはありますか?
PROXY
の状況である必要があります。として MySQLのドキュメント は言う:
MySQLサーバーへの認証が認証プラグインを使用して行われる場合、プラグインは、接続している(外部)ユーザーが特権チェックのために別のユーザーとして扱われることを要求する場合があります。これにより、外部ユーザーが2番目のユーザーのプロキシになることができます。つまり、2番目のユーザーの特権を持つことです。つまり、外部ユーザーは「プロキシユーザー」(なりすましまたは別のユーザーとして知られる可能性があるユーザー)であり、2番目のユーザーは「プロキシユーザー」(プロキシユーザーがIDを引き継ぐことができるユーザー)です。 。
実行:
GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION;
@RolandoMySQLDBAの answer を参照できます。
Mysqlで行を更新すると、この問題が発生しました。
私はmysqlをrootではなく別のユーザーとパスワードを使用して接続します。
Mysqlで「show triggers」と入力すると、トリガーが「root @%」を使用していることがわかりました。これにより、この例外が発生します。