在aws rds mysql中没有为主用户设置超级权限

时间:2013-02-26 12:11:29

标签: mysql amazon-web-services amazon-rds

我已经创建了一个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"

3 个答案:

答案 0 :(得分: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后遇到的问题。它就像一个魅力。

答案 1 :(得分:1)

更好的方法是应用您自己的参数组,并将log_bin_trust_function_creators设置为true。 (默认为假)

答案 2 :(得分:0)

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

要解决此问题,请删除或更新DEFINER子句。