我正在推出一些软件的更新,其中包括运行SQL脚本来创建触发器.
在我的.sql文件语法中,我没有包含任何DEFINER子句,因为我希望我的客户的生产MySQL用户(他们自己设置)能够在程序运行时执行这些触发器.
事实是,测试显示MySQL自动为TRIGGER创建了一个DEFINER 'CURRENT_USER'@'%'.当你做了明智的事情,并使用(受限制的)帐户进行日常数据操作而另一个用于大更新(root?)时,你最终会尝试与一个或多个没有权限的用户一起执行TRIGGER去做吧.
有没有办法删除这个"自动添加定义"功能?
我尝试进入,DEFINER = '%'@'%'但这是不被接受的.
如果您使用的是 *nix 平台,则可以通过以下任一命令行脚本删除定义器。
cat database.sql | sed -e "s/DEFINER=[^*]*\*/\*/" > database_nodefiner.sql
perl -pe 's/\sDEFINER=`[^`]+`@`[^`]+`//' < oldfile.sql > newfile.sql
Run Code Online (Sandbox Code Playgroud)
如果您的database.sql非常大,那么不要先转储它然后删除定义器,而是在转储期间删除定义器。
mysqldump database | sed -e "s/DEFINER=[^*]*\*/\*/" > database_nodefiner.sql
| 归档时间: |
|
| 查看次数: |
3367 次 |
| 最近记录: |