无法在5.1.32上创建具有TRIGGER特权的MySQL触发器

问题描述:

我的开发人员和我在共享的MySQL开发数据库上有自己的开发模式。我的任务要求我在我的模式中创建触发器,但迄今为止我一直没有成功。无法在5.1.32上创建具有TRIGGER特权的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企业GPL的先进日志”,所以TRIGGER权限应该是足够的;但是,DBA授予我mySchema *上的TRIGGER特权,并且在做SHOW GRANTS时我可以看到它,但我仍然遇到需要“超级”特权的错误。我们不想让所有的开发者超级。

有什么建议吗?

这是bug report for this。一种选择是使用 --log-bin-trust-function-creators选项打开,这将允许您创建没有SUPER权限的触发器。 This page解释了什么在手段上转向该选项。基本上,它与MySQL是否认为你的触发器是确定性的(即复制安全)有关。您的数据库管理员可能会或可能不会舒适地在该模式下运行。这并不理想,但比发布SUPER更好...

更新:在第二个链接的文档实际上使它听起来像你可能能够通过使用基于行的复制,甚至混合模式复制。至少这会使复制安全。不管你是否还需要SUPER,我都不知道,但可能值得一试。

+1

感谢您的链接。 DBA将仅在开发服务器上使用log-bin-trust-function-creators选项运行,而不是发出SUPER。 – 2009-10-27 15:10:10

+0

MySQL错误#52127表示,如果您启用了二进制日志记录,则不允许用户在未授予SUPER权限的情况下添加触发器。 – 2011-02-10 06:30:27

+0

值得一提的是,如果您使用复制,此错误实际上非常有用,因为它可以防止您无意中创建在复制设置中不起作用的触发器。 一个例子就是你将RAND()这样的东西用作触发器的一部分。 – coatesap 2013-10-15 15:52:52