問題の説明
ストアドプロシージャ、関数、トリガー、イベント、またはビューを作成すると、次のいずれかのエラーが発生します。
オンプレミスデータベースからSQLステートメントをエクスポートし、RDSインスタンスでステートメントを実行すると、次のいずれかのエラーが発生します。
MySQL 5.6を実行するRDSインスタンスから論理バックアップファイルをダウンロードし、それらをRDSインスタンスまたはオンプレミスデータベースにインポートすると、次のいずれかのエラーが発生します。 エラーコードは、1227または1725であり得る。
MySQLステートメントを実行してパラメーターを変更すると、次のいずれかのエラーが発生します。
[Err] 1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation -- This error commonly occurs on an RDS instance that runs MySQL 5.6.
ERROR 1725 (HY000) at line 1936: OPERATION need to be executed set by ADMIN -- This error commonly occurs on an RDS instance that runs MySQL 5.5.
ERROR 1227 (42000) at line 2984: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
には (少なくとも1つの) SUPER特権が必要です。
原因
データがRDSインスタンスにインポートされると、アカウントにSUPER権限が付与されている場合にのみ、特定のSQL文を実行できます。 ApsaraDB RDS for MySQLはSUPER権限を提供していません。 その結果、SQL文を削除する必要があります。
RDSインスタンスにはグローバルトランザクション識別子 (GTID) が割り当てられていません。
データベースアカウントには、MySQLステートメントを実行して特定のパラメーターを変更するための十分な権限がありません。 例: SET GLOBAL event_scheduler = 1。
解決策
DEFINERステートメントを削除します。
SQLファイルを確認し、次の例に似たステートメントを削除します。
DEFINER=`root`@`%`
Linuxでは、次のコマンドを実行してステートメントを削除します。
sed -ie 's/DEFINER[ ]*=[ ]*[^ ]*/ / ' your.sql
GTID_PURGEDステートメントを削除します。
説明データをエクスポートするときは、-- set-gtid-purge=off設定をmysqldumpコマンドの末尾に追加して、GTID_PURGEDをコマンドから除外することができます。
SQLファイルを確認し、次の例に似たステートメントを削除します。
SET @@GLOBAL.GTID_PURGED='d0502171-3e23-11e4-9d65-d89d672af420:1-373, d5deee4e-3e23-11e4-9d65-d89d672a9530:1-616234';
Linuxでは、次のコマンドを実行してステートメントを削除します。
awk '{ if (index($0,"GTID_PURGED")) { getline; while (length($0) > 0) { getline; } } else { print $0 } }' your.sql | grep -iv 'set @@' > your_revised.sql
アカウントの権限を確認します。 アカウントにSUPER権限がない場合は、アカウントにSUPER権限を付与するか、別のアカウントに切り替えて再試行してください。 アカウント管理の権限がない場合は、管理者に連絡してください。
適用範囲
ApsaraDB RDS for MySQL
よくある質問
特権アカウントを使用してテーブルを作成するときに、「ユーザー 'XXX' @ '%' からデータベース '__recycle_bin__' へのアクセスが拒否された」というエラーメッセージが表示された場合はどうすればよいですか?
MySQLでは、システムデータベースにカスタムテーブルを作成することはできません。 カスタムデータベースに移動するか、カスタムデータベースを作成してからテーブルを作成することをお勧めします。