互联网上有很多关于如何启用SUPER权限的建议,以防有人遇到以下错误:
"错误 1419 (HY000):您没有 SUPER 权限,并且已启用二进制日志记录">
但是我找不到为什么MySQL在二进制日志记录选项打开时禁用这些特权。
如果我使用例如修改数据库或其他内容的触发器,复制是否存在一些问题?它是否安全,如果不是,如果我将SUPER特权归还,我可以遇到什么样的问题以及在什么情况下可以遇到?我认为这个限制背后应该有一些理由,但不明白是哪一个。
有人对此有答案吗?
谢谢。
这是我在文档中找到的一些详细解释。希望这可以帮助您理解。
CREATE FUNCTION
和INSERT
语句将写入 二进制日志,因此从站将执行它们。因为从属SQL 线程具有完全权限,它将执行危险语句。 因此,函数调用对主节点和 从属服务器,并且不是复制安全的。防止具有二进制日志记录的服务器的这种危险 启用后,存储函数创建者必须具有
SUPER
权限,在 除了所需的通常CREATE ROUTINE
特权之外。 同样,要使用ALTER FUNCTION
,您必须具有SUPER
除ALTER ROUTINE
特权外的特权。没有SUPER privilege
,将发生错误: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。你 还可以通过使用 启动服务器时--log-bin-trust-function-creators=1
选项。 如果未启用二进制日志记录,log_bin_trust_function_creators
不适用。 创建函数不需要SUPER
,除非, 如前所述,函数中的DEFINER
值 定义需要它。
来源:https://dev.mysql.com/doc/refman/8.0/en/stored-programs-logging.html
嗨,如果有人来这里寻找解决方案并且您正在使用Linux
systemctl stop mysqld
- 将
log_bin_trust_function_creators = 1
添加到my.cnf
在/etc
下 systemctl start mysqld
基于Bawantha的回答和Adam Ježek的评论,解决此问题的一种干净方法是创建一个名为60-trust-function-creators.cnf
的文件
# Fix 'ERROR 1419 (HY000): You do not have the SUPER privilege and binary logging is enabled'
[mysqld]
log_bin_trust_function_creators = 1
根据您的系统,此文件将进入/etc/mysql/mysql.conf.d/
、/etc/mysql/mariadb.conf.d/
或类似内容。
该文件不必是该特定名称。它可以是XX-whatever-your-want.cnf,其中50
您是否正在使用 AWS RDS,例如 MariaDB。
设置参数组名称和描述,使用这些家族 (MariaDB)
并将参数值"log_bin_trust_function_creators"设置为 1。
保存并重启实例 RDS。