SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【MySQL】 Error 1449 The user specified as a definer (‘username’@’hostname’) does not exist

問題

MySQLのエラーコード 1449 って何?

Error 1449 The user specified as a definer ('username'@'hostname') does not exist

よそからダンプを取ってきてリストアしただけの環境で、データをinsertしようとしたら発生しました。

トリガーが定義されているデータベースなんだけど何か問題がある?

mysql

答え

トリガーやストアドプロシージャなどを含めてダンプを取得したとき、ダンプファイルに以下のようなSQLが含まれている。

/*!50017 DEFINER=`dbuser`@`192.0.2.%`*/

例えば、TRIGGERの場合だと以下のような形で、ビュー、ファンクション、プロシージャー、トリガーの権限を設定する DEFINER が出力されている。

DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`softel`@`192.168.0.%`*/ /*!50003 TRIGGER `task_bins` BEFORE INSERT ON `task` FOR EACH ROW
SET NEW.task_created = now() */;;
DELIMITER ;

`dbuser`@`192.0.2.%` が存在しなくても、DEFINER=`dbuser`@`192.0.2.%` でトリガーなどを作ることができて、いざトリガーが実行されるときに、「ユーザーがいない」というエラーになる。

ダンプファイルから、「/*!50017 DEFINER=`dbuser`@`192.0.2.%`*/」の部分を削除するか、リストア先に存在する権限のあるユーザーに書き換えるとよい。

プロシージャー、ビューでは、「SQL SECURITY INVOKER」を指定するのもよい。

関連するメモ

コメント