2

AWS RDSインスタンスを作成し、マスターパスワードを使用してマスターユーザーを作成しましたが、正常に機能/接続しています。

しかし、そのインスタンスで関数を作成しようとすると、次のエラーが表示されます。

ERROR 1418: This function has none of DETERMINISTIC, NO SQL, 
or READS SQL DATA in its declaration and binary logging is enabled  
(you might want to use the less safe log_bin_trust_function_creator variable).

私の例では、変数log_bin_trust_function_creatorsはを示しOFFています。を使用して変数を変更しようとすると、SET GLOBAL log_bin_trust_function_creators = 1;別のエラーが発生します。"Error Code: 1227. Access denied; you need (at least one of) the SUPER privilege(s) for this operation"

4

3 に答える 3

2

RDS インスタンスのパラメーターグループに log_bin_trust_function_creators = 1 を設定します。

注: デフォルトのパラメータ グループは編集できません。新しいパラメータ グループを作成し、UI (AWS 管理コンソール) から変更するか、コマンドを使用して RDS インスタンスに割り当てます。

DELIMITER $$
CREATE DEFINER=`DB_USERNAME_HERE`@`%` FUNCTION `GetDistance`(coordinate1 VARCHAR(120), coordinate2 VARCHAR(120)) RETURNS decimal(12,8)
READS SQL DATA
BEGIN
   DECLARE distance DECIMAL(12,8);
   /*Business logic goes here for the function*/
   RETURN distance;
END $$
DELIMITER ;

ここで、必要に応じてDB_USERNAME_HEREを RDS データベースのユーザー名と関数名に置き換える必要があります。

重要なことは次のとおりです。DEFINER=`DB_USERNAME_HERE`@`%`

これは、パラメーター グループで log_bin_trust_function_creators = 1 を設定した後に直面した問題でした。そして、それは魅力のように機能しました。

于 2015-10-03T09:59:05.007 に答える
1

より良い方法は、log_bin_trust_function_creators を true に設定して、独自のパラメーター グループを適用することです。(デフォルトでは false)

于 2014-02-06T16:25:26.423 に答える
0

DEFINERこれは、現在のユーザーではないプロシージャ/関数/ビューを作成しようとすると発生します。

これを解決するには、DEFINER句を削除または更新します。

于 2013-02-26T21:29:01.837 に答える