启用二进制日志记录选项后,为什么禁用超级权限?

时间:2019-05-31 06:22:26

标签: mysql mariadb

Internet上有很多关于如何启用SUPER特权的建议,以防万一有人遇到以下错误:

  

“错误1419(HY000):您没有SUPER特权,并且启用了二进制日志记录”

但是我找不到为什么当二进制日志记录选项打开时,MySQL会禁用这些特权。

如果我使用例如复制是否存在一些问题触发哪个修改数据库或其他?是否安全?如果没有,如果我将返回SUPER特权返回,在什么情况下会遇到什么问题?我认为此限制背后应有一些基本原理,但不了解是哪个。

有人对此有答案吗?

谢谢。

1 个答案:

答案 0 :(得分:4)

这是我在文档中找到的一些详细说明。希望这可以帮助您理解。

CREATE FUNCTIONINSERT语句被写入二进制日志,因此从站将执行它们。因为slave SQL thread has full privileges,它将执行dangerous statement。因此,函数调用对主服务器和从服务器有不同的影响,并且为not replication-safe

为防止启用了二进制日志记录的服务器的这种危险,除通常需要的CREATE ROUTINE特权外,存储函数创建者还必须具有SUPER特权。同样,要使用ALTER FUNCTION,除了ALTER ROUTINE特权外,还必须具有SUPER特权。

没有SUPER特权,将发生错误:

ERROR 1419 (HY000): You do not have the SUPER privilege and
binary logging is enabled (you *might* want to use the less safe
log_bin_trust_function_creators variable)

如果您不希望函数创建者具有SUPER特权(例如,如果您的系统上所有具有CREATE ROUTINE特权的用户都是经验丰富的应用程序开发人员,请将全局log_bin_trust_function_creators系统变量设置为{ {1}}。

启动服务器时,还可以使用1选项设置此变量。如果未启用二进制日志记录,则--log-bin-trust-function-creators=1不适用。除非如上所述,否则函数创建不需要SUPER,除非函数定义中的DEFINER值需要它。

src: https://dev.mysql.com/doc/refman/8.0/en/stored-programs-logging.html

相关问题