mysql 为什么当二进制日志记录选项打开时,SUPER权限被禁用?

fumotvh3  于 2023-05-28  发布在  Mysql
关注(0)|答案(3)|浏览(228)

在互联网上有很多关于如何启用SUPER权限的建议,以防有人遇到以下错误:
“错误1419(HY000):您没有SUPER权限,并且已启用二进制日志记录”
但是我不能找到为什么MySQL在二进制日志选项打开时禁用这些特权。
如果我使用例如修改数据库或其他东西的触发器?它是否安全,如果不安全,什么样的问题,在什么情况下,我可以打,如果我将返回超级特权回来?我认为这个限制背后应该有一些理由,但不明白是哪一个。
有人能回答吗?
谢谢你。

gev0vcfq

gev0vcfq1#

下面是我在文档中找到的一些详细解释。希望这能帮助你理解。
CREATE FUNCTIONINSERT语句被写入二进制日志,因此从机将执行它们。由于从属SQL线程具有完全权限,因此它将执行危险语句。因此,函数调用对主设备和从设备具有不同的影响,并且不是复制安全的。
为了防止启用二进制日志记录的服务器出现这种危险,存储函数创建者除了需要通常的CREATE ROUTINE权限外,还必须具有SUPER权限。类似地,要使用ALTER FUNCTION,除了ALTER ROUTINE权限之外,还必须具有SUPER权限。如果没有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

du7egjpx

du7egjpx2#

嗨,如果有人来这里寻找解决方案,如果你正在使用Linux

  1. systemctl stop mysqld
    1.将log_bin_trust_function_creators = 1添加到/etc下的my.cnf
  2. systemctl start mysqld
6yt4nkrj

6yt4nkrj3#

基于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 < XX < 100。

相关问题