Amazon RDS for MySQL にインポートを行うとAccess deniedと怒られる

事象

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`@`%`に紐づけられていた。

2.

(書き込み対象のスキーマに対しては権限を付与していたが、)
ビューやスキーマの情報を管理するスキーマに対して権限を与えていなかった。

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実行時のユーザーが異なるため

対応方法

1.

テキストエディタなどでダンプファイルを直接編集する。
具体的には、`user1`@`localhost`となっている箇所を、`user1`@`%`;に書き換える。

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 (以下略)