【问题标题】:Can't create MySQL trigger with TRIGGER privilege on 5.1.32无法在 5.1.32 上创建具有 TRIGGER 权限的 MySQL 触发器
【发布时间】:2010-12-10 06:54:21
【问题描述】:

我和我的开发伙伴在共享 MySQL 开发数据库上拥有自己的开发模式。我的任务要求我在架构中创建触发器,但到目前为止我没有成功。

CREATE TRIGGER myTrigger AFTER DELETE on myTable
FOR EACH ROW BEGIN
    -- DO STUFF
END;

MySQL 说: 错误 1419 (HY000):您没有 SUPER 权限并且启用了二进制日志记录(您可能想要使用不太安全的 log_bin_trust_function_creators 变量)

我查看了 MySQL 手册 (http://dev.mysql.com/doc/refman/5.1/en/privileges-provided.html):

TRIGGER 权限使您能够创建和删除触发器。您必须拥有此表的权限才能为该表创建或删除触发器。此权限是在 MySQL 5.1.6 中添加的。 (在 MySQL 5.1.6 之前,触发操作需要 SUPER 权限。)

我们正在运行“5.1.32-enterprise-gpl-advanced-log”,所以 TRIGGER 权限应该足够了;但是,DBA 授予了我在mySchema.* 上的 TRIGGER 权限,当我执行 SHOW GRANTS 时我可以看到它;但是我仍然收到关于需要“SUPER”权限的错误。我们不想给所有的开发者SUPER。

有什么建议吗?

【问题讨论】:

    标签: sql mysql triggers mysql-management


    【解决方案1】:

    这里是bug report for this。一种选择是使用 --log-bin-trust-function-creators 选项已打开,这将允许您在没有 SUPER 权限的情况下创建触发器。 This page 解释了打开该选项的含义。基本上它与 MySQL 是否认为您的触发器是确定性的(即复制安全)有关。您的 DBA 可能会也可能不会在该模式下运行。这并不理想,但比送出 SUPER 更好......

    更新:第二个链接中的文档实际上听起来您可以通过使用基于行的复制甚至混合模式复制来解决这个问题。至少这会使复制变得安全。我不知道您是否仍然需要拥有 SUPER,但可能值得一试。

    【讨论】:

    • 感谢您的链接。 DBA 将仅在开发服务器上使用 log-bin-trust-function-creators 选项运行,而不是提供 SUPER。
    • MySQL 错误 #52127 说如果您启用了二进制日志记录,您不能允许用户在不授予 SUPER 权限的情况下添加触发器。
    • 值得一提的是,如果您使用复制,此错误有时实际上非常有用,因为它可以防止您无意中创建在复制设置中不起作用的触发器。这方面的一个例子是你使用像 RAND() 这样的东西作为触发器的一部分。
    猜你喜欢
    • 1970-01-01
    • 2016-01-25
    • 2020-11-22
    • 2014-08-09
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    相关资源
    最近更新 更多