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。

注意:默认参数组不可编辑。创建一个新的参数组并将其分配给 RDS 实例,方法是从 UI(AWS 管理控制台)修改它,或者使用命令

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。(默认为假)

于 2014-02-06T16:25:26.423 回答
0

当您尝试使用DEFINER非当前用户创建过程/函数/视图时,会发生这种情况。

要解决此删除或更新DEFINER子句。

于 2013-02-26T21:29:01.837 回答