web-dev-qa-db-ja.com

Amazon MySQL RDSのマスターユーザーにSUPER権限が定義されていません

私は、Amazon psific(singapore)リージョンのAmazon rdsに1つのメディアインスタンスを作成しました。マスターパスワードを使用してマスターユーザーを作成しました。そしてそれは私のローカルPCにインストールされたワークベンチで正常に動作/接続しています。そのインスタンスに関数を作成しようとすると、次のエラーが表示されます

エラー1418:この関数の宣言にはDETERMINISTIC、NO SQL、READS SQL DATAのいずれも含まれておらず、バイナリログが有効になっています(安全性の低いlog_bin_trust_function_creators変数を使用することをお勧めします)

私のインスタンスでは、変数(log_bin_trust_function_creators)がOFFを示しています。今私が変数を使用して変更に行くとき

SET GLOBAL log_bin_trust_function_creators = 1;

それは私に別のエラーを与えます

エラーコード:1227。アクセスが拒否されました。この操作には、(少なくとも1つの)SUPER特権が必要です。

このエラーを解決する方法がわかりません。

誰かが助けることはできますか?

6
Manish Sapkal

log_bin_trust_function_creatorsを変更してみてください。ただし、 その変数の意味 を検討すると、より適切と思われる代替アプローチがあります。

安全でないイベントがバイナリログに書き込まれる原因となるストアド関数を作成しないように、ストアド関数の作成者を信頼できるかどうかを制御します。

0を設定すると、DETERMINISTIC特性、またはREADS SQL DATAまたはNO SQL特性を使用して関数を宣言する必要があるという制限も適用されます。変数が1に設定されている場合、MySQLはストアドファンクションの作成にこれらの制限を適用しません。

そのオプションのすべては、CREATEステートメントで3つの特性の1つを使用して行うことを断言せずに、何をしているのかを理解していることを前提としています...しかし、関数を適切に宣言していない場合、潜在的な最適化を見逃す可能性があります。

ルーチンを誤って宣言すると、結果に影響したり、パフォーマンスに影響したりする可能性があります

まとめると、これは最も適切なアプローチは、必要に応じてDETERMINISTICまたはREADS SQL DATAまたはNO SQLを使用してストアド関数を宣言することであり、これらが関数の動作を正しく記述していない場合、 これらのオプション も「信頼されている」ため、関数は依然として安全でないステートメントをバイナリログに書き込む可能性があります。

ルーチンの性質の評価は、作成者の「誠実さ」に基づいています。MySQLは、DETERMINISTICと宣言されたルーチンに非決定的な結果を生成するステートメントがないことを確認しません。


気になることはさておき:賢明な観察者は、私がドキュメントの説明から何かを省略したことに気付くでしょう:

0(デフォルト)に設定すると、ユーザーはCREATE ROUTINEまたはALTER ROUTINE特権に加えてSUPER特権を持たない限り、ストアドファンクションの作成または変更が許可されません。

誰もRDSでSUPERを取得せず、これが公式ドキュメントのエラーではないと想定しているため、これはMySQLの動作のAWSカスタマイズである必要があるようです。

6