无法在MySQL 5.1.32上使用TRIGGER权限创建触发器。

14

我和其他开发人员在共享的MySQL开发数据库上拥有自己的开发模式。我的任务要求我在我的模式中创建触发器,但是到目前为止我还没有成功。

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

MySQL报错:ERROR 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权限。

有什么建议吗?

1个回答

15

这里是此问题的错误报告。其中一个选项是使用打开了--log-bin-trust-function-creators选项的运行方式,这将允许您创建触发器而无需SUPER权限。此页面解释了打开该选项的含义。基本上,它涉及MySQL是否认为您的触发器是确定性的(即是否安全可复制)。您的DBA可能会或可能不会在该模式下运行舒适。虽然这并不理想,但比授予SUPER权限要好得多...

更新:第二个链接中的文档实际上表明,您可以通过使用基于行的复制甚至混合模式复制来解决此问题。至少这样做可以使其安全复制。您是否仍需要具备SUPER权限我不确定,但这值得一试。


1
谢谢提供链接。DBA将仅在开发服务器上使用log-bin-trust-function-creators选项而不是授予SUPER权限。 - Michael Moussa
MySQL Bug #52127 表示,如果启用了二进制日志记录,则不能允许用户添加触发器而不授予 SUPER 权限。 - Robert Harvey
值得一提的是,如果您正在使用复制功能,这个错误有时实际上非常有用,因为它可以防止您无意中创建一个在复制设置中无法工作的触发器。其中一个例子是当您在触发器中使用类似RAND()的函数时。 - coatesap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接