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_creators variable)
时间: 2023-11-06 16:21:44 浏览: 30
这个警告消息是因为在创建存储函数时,没有指定函数的属性,而且二进制日志记录是启用的。这可能会导致一些安全问题。
为了解决这个问题,你可以在创建存储函数时,添加函数的属性,例如:
```
CREATE FUNCTION f_sum(sno INT) RETURNS INT
DETERMINISTIC
READS SQL DATA
BEGIN
DECLARE total INT;
SELECT SUM(score) INTO total FROM score WHERE sno = sno;
RETURN total;
END;
```
其中,DETERMINISTIC 属性表示函数的结果只与输入参数有关,不会受到其他因素的影响;READS SQL DATA 属性表示函数只会从数据库中读取数据,不会修改数据。这些属性可以帮助确保函数的安全性,并允许在启用二进制日志记录的情况下创建存储函数。
另外,如果你不想启用 log_bin_trust_function_creators 变量,也可以在创建存储函数时,添加 SQL SECURITY DEFINER 属性,例如:
```
CREATE FUNCTION f_sum(sno INT) RETURNS INT
SQL SECURITY DEFINER
BEGIN
DECLARE total INT;
SELECT SUM(score) INTO total FROM score WHERE sno = sno;
RETURN total;
END;
```
这个属性表示函数的执行权限是基于函数的定义者而不是调用者。这样做可以确保只有授权用户才能执行该函数。