web-dev-qa-db-ja.com

定義者として指定されたユーザー( '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

しかし、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

何故ですか?他のトリガーを同じ方法で作成しましたが、それらは機能しましたが、これは機能しません。これに関するアドバイスやヘルプはありますか?

2
ReynierPM

PROXYの状況である必要があります。として MySQLのドキュメント は言う:

MySQLサーバーへの認証が認証プラグインを使用して行われる場合、プラグインは、接続している(外部)ユーザーが特権チェックのために別のユーザーとして扱われることを要求する場合があります。これにより、外部ユーザーが2番目のユーザーのプロキシになることができます。つまり、2番目のユーザーの特権を持つことです。つまり、外部ユーザーは「プロキシユーザー」(なりすましまたは別のユーザーとして知られる可能性があるユーザー)であり、2番目のユーザーは「プロキシユーザー」(プロキシユーザーがIDを引き継ぐことができるユーザー)です。 。

実行:

 GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION;

@RolandoMySQLDBAの answer を参照できます。

2
oNare

Mysqlで行を更新すると、この問題が発生しました。

私はmysqlをrootではなく別のユーザーとパスワードを使用して接続します。

Mysqlで「show triggers」と入力すると、トリガーが「root @%」を使用していることがわかりました。これにより、この例外が発生します。

2
carton.swing