mysqldump 转储完整模式所需的最小授权? (触发器不见了!!)
Posted
技术标签:
【中文标题】mysqldump 转储完整模式所需的最小授权? (触发器不见了!!)【英文标题】:Minimum GRANTs needed by mysqldump for dumping a full schema? (TRIGGERs are missing!!) 【发布时间】:2012-01-29 08:21:27 【问题描述】:我有一个名为 dump 的 mysql 用户,具有以下权限:
GRANT USAGE ON *.* TO 'dump'@'%' IDENTIFIED BY ...
GRANT SELECT, LOCK TABLES ON `mysql`.* TO 'dump'@'%'
GRANT SELECT, LOCK TABLES ON `myschema`.* TO 'dump'@'%'
我想使用 dump 用户转储所有数据(包括触发器和过程)。我通过以下方式调用mysqldump:
mysqldump -u dump -p --routines --triggers --quote-names --opt \
--add-drop-database --databases myschema > myschema.sql
转储文件一切正常,除了触发器,它们丢失了!!
如果我使用 root MySQL 用户尝试 mysqldump,触发器会正确转储:
mysqldump -u root -p --routines --triggers --quote-names --opt \
--add-drop-database --databases myschema > myschema.sql
所以,我想这是一个 perms 问题......我的 dump MySQL 用户需要哪些额外授权才能正确执行完整转储?
【问题讨论】:
【参考方案1】:假设完全转储还意味着VIEW
s 和EVENT
s,您将需要:
GRANT USAGE ON *.* TO 'dump'@'%' IDENTIFIED BY ...;
GRANT SELECT, LOCK TABLES ON `mysql`.* TO 'dump'@'%';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON `myschema`.* TO 'dump'@'%';
如果你有执行函数的VIEW
s,那么不幸的是你还需要EXECUTE
。
我自己的问题是:如果我只想进行无数据转储,为什么还需要 SELECT
?
【讨论】:
对于 5.5 及以上版本,您实际上不需要 TRIGGER 权限来转储触发代码。 我使用的是 5.5,需要 TRIGGER 权限来转储触发代码。 在我的情况下,我似乎还需要LOCK TABLES
在我试图转储自己的数据库上......使用5.5.49-MariaDB
关于@0xC0000022L 的注释,是否锁定表对于mysqldump 是可选的,具体取决于您的mysqldump 参数(相关参数为--opt
、--lock-tables
、--lock-all-tables
、--single-transaction
和各自的@ 987654333@ 变种。【参考方案2】:
我找到了我需要的额外 GRANT!
GRANT TRIGGER ON `myschema`.* TO 'dump'@'%'
这里有官方文档的参考:http://dev.mysql.com/doc/refman/5.5/en/privileges-provided.html#priv_trigger
TRIGGER 权限启用触发器操作。您必须拥有此表的权限才能为该表创建、删除或执行触发器。
【讨论】:
名字其实是TRIGGER,不是TRIGGERS 尽管这可能是对作者问题的回答,但它并没有回答以下问题:“执行完整转储的最低 GRANT 要求是什么”。一方面:缺少 EVENT 和 SHOW VIEW。 对于 5.5 及以上版本,您实际上不需要TRIGGER
权限来转储触发代码。
我用的是 5.5,我确实需要它【参考方案3】:
我发现,有时如果 VIEW DEFINER 用户不存在,转储会失败。
更改它,如there 所述
【讨论】:
不知道为什么这被否决了,解决了我的问题。我已将定义器指定为person
而不是 person@localhost
。谢谢!【参考方案4】:
除了Jannes 答案,当使用带有--tab 选项的mysqldump 时(为每个转储表生成一个制表符分隔的文本文件),您的MySQL 用户必须被授予 FILE
特权:
GRANT FILE ON *.* TO 'dump'@'%';
官方文档参考:https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_tab
在本节中提到:
这个选项应该只在mysqldump运行在同一个服务器上时使用 机器作为 mysqld 服务器。因为服务器创建 *.txt 文件 在您指定的目录中,该目录必须是可写的 您使用的服务器和 MySQL 帐户必须具有 FILE 特权。因为 mysqldump 在同一目录中创建 *.sql,所以它 必须可由您的系统登录帐户写入。
【讨论】:
以上是关于mysqldump 转储完整模式所需的最小授权? (触发器不见了!!)的主要内容,如果未能解决你的问题,请参考以下文章