在互联网上有很多关于如何启用SUPER权限的建议,以防有人遇到以下错误:“错误1419(HY000):您没有SUPER权限,并且已启用二进制日志记录”但是我不能找到为什么MySQL在二进制日志选项打开时禁用这些特权。如果我使用例如修改数据库或其他东西的触发器?它是否安全,如果不安全,什么样的问题,在什么情况下,我可以打,如果我将返回超级特权回来?我认为这个限制背后应该有一些理由,但不明白是哪一个。有人能回答吗?谢谢你。
gev0vcfq1#
下面是我在文档中找到的一些详细解释。希望这能帮助你理解。CREATE FUNCTION和INSERT语句被写入二进制日志,因此从机将执行它们。由于从属SQL线程具有完全权限,因此它将执行危险语句。因此,函数调用对主设备和从设备具有不同的影响,并且不是复制安全的。为了防止启用二进制日志记录的服务器出现这种危险,存储函数创建者除了需要通常的CREATE ROUTINE权限外,还必须具有SUPER权限。类似地,要使用ALTER FUNCTION,除了ALTER ROUTINE权限之外,还必须具有SUPER权限。如果没有SUPER privilege,将出现错误:
CREATE FUNCTION
INSERT
CREATE ROUTINE
SUPER
ALTER FUNCTION
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
log_bin_trust_function_creators
--log-bin-trust-function-creators=1
DEFINER
du7egjpx2#
嗨,如果有人来这里寻找解决方案,如果你正在使用Linux
Linux
systemctl stop mysqld
log_bin_trust_function_creators = 1
/etc
my.cnf
systemctl start mysqld
6yt4nkrj3#
基于Bawantha的回答和Adam Ježek的评论,解决这个问题的一个简单方法是创建一个名为60-trust-function-creators.cnf的文件,其中
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。
/etc/mysql/mysql.conf.d/
/etc/mysql/mariadb.conf.d/
3条答案
按热度按时间gev0vcfq1#
下面是我在文档中找到的一些详细解释。希望这能帮助你理解。
CREATE FUNCTION
和INSERT
语句被写入二进制日志,因此从机将执行它们。由于从属SQL线程具有完全权限,因此它将执行危险语句。因此,函数调用对主设备和从设备具有不同的影响,并且不是复制安全的。为了防止启用二进制日志记录的服务器出现这种危险,存储函数创建者除了需要通常的
CREATE ROUTINE
权限外,还必须具有SUPER
权限。类似地,要使用ALTER FUNCTION
,除了ALTER ROUTINE
权限之外,还必须具有SUPER
权限。如果没有SUPER privilege
,将出现错误:如果不希望函数创建者拥有
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
du7egjpx2#
嗨,如果有人来这里寻找解决方案,如果你正在使用
Linux
systemctl stop mysqld
1.将
log_bin_trust_function_creators = 1
添加到/etc
下的my.cnf
systemctl start mysqld
6yt4nkrj3#
基于Bawantha的回答和Adam Ježek的评论,解决这个问题的一个简单方法是创建一个名为
60-trust-function-creators.cnf
的文件,其中根据您的系统,此文件将位于
/etc/mysql/mysql.conf.d/
、/etc/mysql/mariadb.conf.d/
或类似的目录下。文件不必是该特定名称。它可以是XX-whatever-your-want.cnf,其中50 < XX < 100。