【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しようとしたら発生しました。
トリガーが定義されているデータベースなんだけど何か問題がある?
答え
トリガーやストアドプロシージャなどを含めてダンプを取得したとき、ダンプファイルに以下のような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」を指定するのもよい。
コメント