事象
Amazon RDS for MySQLに対して、MySQL WorkbenchでData Export行ったSQLファイルをData Importを行うと以下の様なエラーが返ってくる。
ERROR 1227 (42000) at line 17: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
原因
1.
インポートしたいダンプファイルのユーザーは`user1`@`localhost`となっていた。
しかし、RDSはリモートなので、インポート先は`user1`@`%`に紐づけられていた。
3.
インポートしたいダンプファイルがバイナリログモード:OFFなSQL定義であったため。
なお、AWSのサイトを確認すると以下の様な記載が存在した。
Resolve definer errors when importing to Amazon RDS MySQL using mysqldump
そこで、log_bin_trust_function_creatorsを確認したところ、1(ON)が設定されていた。
4.
SQLに記述されているPROCEDUREのDEFFINERと、Import実行時のユーザーが異なるため
対応方法
2.
雑な設定であれば以下で対応できる。
grant all privileges on *.* to `user1`@`%`; flush privileges;
真面目にするのであれば、以下の様な対応をすれば良い。
●スキーマ(多すぎるかも…)
・information_schema
・mysql
・sys
●権限
自信が無いので書けない…。
3.
インポート元のSQLファイルを加工する。
具体的には、以下の様なSQL文をコメントアウトなどして削除した状態にした。
SET @@MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN; (中略) SET @@SESSION.SQL_LOG_BIN= 0; (中略) SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ ''; (中略) SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
4.
実行するユーザーをDEFINERに記述しているユーザーで実行する。
もしくは、SQL文の以下の様なDEFINER=の後を実行したいユーザー名に書き換える。
CREATE DEFINER=`user1`@`%` PROCEDURE `PROCEDURE1`(IN (以下略)