如何在执行CREATE TRIGGER时从表格中删除默认的DEFINER?

8
我正在推出一项软件更新,其中包括运行SQL脚本以创建触发器。
在我的.sql文件语法中,我没有包括任何DEFINER子句,因为我希望客户的生产MySQL用户(他们自己设置)能够在程序运行时执行这些触发器。
问题是,测试表明MySQL会自动为TRIGGER创建DEFINER,并使用'CURRENT_USER'@'%'。当您做正确的事情,并为日常数据操作使用一个(受限制的)帐户和另一个用于大型更新的帐户(root?)时,您最终尝试使用一个或多个没有执行权限的用户执行TRIGGER。
有没有办法去除这个“自动添加definer”的功能?
我尝试输入DEFINER ='%' @'%',但不被接受。

2
看一下这个 - https://dev59.com/ZWkw5IYBdhLWcg3wV5MD - Devart
1个回答

2

如果您使用*nix平台,可以通过以下任一命令行脚本剥离定义者。

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

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

如果您的database.sql非常大,那么在删除definer时,不要先转储再删除,而是在转储过程中删除definer。 mysqldump database | sed -e "s/DEFINER=[^*]*\*/\*/" > database_nodefiner.sql

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