如何使用mysqldump在帐户之间复制视图?

时间:2020-03-06 14:56:21  来源:igfitidea点击:

我正在使用mysqldump在特定计算机上的帐户之间复制数据库。一切工作都很好,除非进入定义的视图。由于转储包含以下内容,所以...

/*!50013 DEFINER=`user_a`@`localhost` SQL SECURITY DEFINER */

...将转储加载到user_b上的mysql时,我们收到一个错误:

ERROR 1227 (42000) at line 657: Access denied; you need the SUPER privilege for this operation

不用说,我对此mysql实例没有超级权限。有没有办法说服mysqldump以用户不可知的方式转储视图?关于这一点,我在手册中找不到任何内容。我是否必须实际解析转储文件以替换用户名?还是我错过了什么?

解决方案

SQL SECURITY子句​​确定检查视图的访问特权时使用哪个MySQL帐户(我们可能已经知道)。

创建视图时,可以为该视图定义几个安全性选项。我们可以在此处阅读更多内容,但基本上,默认情况下,访问权限仅限于视图的"定义者",即创建视图的用户。

同样的问题。我这样解决了:

mysqldump -uuser1 -ppassword1 database1 > backup.sql

sed '/^\/\*\!50013 DEFINER/d' backup.sql > backup_without_50013.sql

mysql -u user2 -ppassword2 -D database2 < backup_without_50013.sql

有趣的是sed命令,该命令在此处删除以/ *!50013开头的所有行。

海蒂

使用选项"" --skip-triggers""运行mysqldump

我们将需要处理备份文件并更改DEFINER:

DEFINER =user_a@localhost

我喜欢将其更改为:

DEFINER = CURRENT_USER

然后,它将自动与加载它的帐户关联。