如何在表上执行CREATE TRIGGER时删除默认DEFINER?

时间:2012-04-23 09:50:25

标签: mysql triggers

我正在推出一些软件的更新,其中包括运行SQL脚本来创建触发器。

在我的.sql文件语法中,我没有包含任何DEFINER子句,因为我希望我的客户的生产MySQL用户(他们自己设置)能够在程序运行时执行这些触发器。

事实是,测试显示MySQL使用'CURRENT_USER'@'%'自动为TRIGGER创建一个DEFINER。 当你做了明智的事情,并使用(受限制的)帐户进行日常数据操作而另一个用于大更新(root?)时,你最终会尝试与一个或多个没有权限的用户一起执行TRIGGER这样做。

有没有办法删除这个“自动添加定义器”功能?

我尝试输入DEFINER = '%'@'%',但这不被接受。

1 个答案:

答案 0 :(得分:1)

如果您使用的是* nix平台,则可以使用以下任一命令行脚本删除定义器。

cat database.sql | sed -e "s/DEFINER=[^*]*\*/\*/" > database_nodefiner.sql

perl -pe 's/\sDEFINER=`[^`]+`@`[^`]+`//' < oldfile.sql > newfile.sql

如果您的database.sql非常大,那么不要先转储它然后删除定义器,而是在转储期间删除定义器。

mysqldump database | sed -e "s/DEFINER=[^*]*\*/\*/" > database_nodefiner.sql