为什么启用二进制日志选项时禁用 SUPER 权限?

Vol*_*vka 13 mysql mariadb

互联网上有很多关于如何启用超级权限的建议,以防有人遇到以下错误:

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

但是当二进制日志选项打开时,我无法找到 MySQL 禁用这些特权的原因。

如果我使用例如修改数据库或其他东西的触发器,复制是否存在一些问题?是否安全,如果不安全,如果我将SUPER特权退回,我可以在什么情况下遇到什么样的问题?我认为这个限制背后应该有一些理由,但不明白是哪一个。

有人对此有答案吗?

谢谢你。

Baw*_*tha 21

您好,如果有人来这里寻找解决方案并且您正在使用Linux

  1. systemctl stop mysqld
  2. 添加log_bin_trust_function_creators = 1my.cnf 下面 /etc
  3. systemctl start mysqld

  • 根据您的系统,您可能需要将其放在“[mysqld]”部分下的“/etc/mysql/mysql.conf.d/mysqld.cnf”文件中。我有 apt 包 `mysql-server` 提供的 mysql,并将这一行放入 my.cnf 对我来说不起作用。可能是因为默认情况下“my.cnf”文件仅包含其他配置文件,并且其本身缺少“mysqld”部分。 (11认同)

Vik*_*hak 20

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

CREATE FUNCTIONINSERT语句被写入二进制日志,以便从机将执行它们。因为slave SQL 线程拥有完全权限,所以会执行危险语句。因此,函数调用对 master 和 slave 有不同的影响,并且不是复制安全的。

为了防止启用了二进制日志的服务器的这种危险SUPER,除了通常CREATE ROUTINE所需的权限之外,存储函数创建者还必须具有该权限。同样,要使用ALTER FUNCTIONSUPER 除了特权之外,您还必须拥有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)
Run Code Online (Sandbox Code Playgroud)

如果您不想要求函数创建者拥有该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

  • 如果我正确理解这一点,如果某些用户对其他数据库没有特权并且无法修改它们(在主数据库上),则可能会出现问题,而从数据库将无条件地执行此操作(因为拥有所有特权)并且它可以是攻击源。如果 MySQL 集群不面向客户并且所有数据在插入数据库之前都通过安全检查和清理,则似乎此限制不太相关。这个说法正确还是错误?谢谢。 (2认同)
  • 如果我理解正确的话,……它可能是攻击的根源。- 正确 似乎有这个限制...或者没有?- 如果在此过程中调用任何存储过程并发生更新/插入数据,则可能被视为不安全和“不确定”。如果执行更新的函数是不确定的,则它是不可重复的。这可能会产生两个不良影响:1)它会使从属设备与主控设备不同。2) 恢复后的数据会与原始数据不同。我没有在实验室尝试过这个。 (2认同)
  • 谢谢,维卡什,你帮了我很多。 (2认同)