MySQL OCP888题解077-mysqldump做一致性备份所需权限

1、原题

1.1、原题

1.2、答案

D

2、题目解析

2.1、题干解析

本题考察mysqldump做一致性备份时所需的权限。

2.2、选项解析

  1. 用mysqldump导出一个数据库时,如果使用–single-transaction选项,则只需要该数据库的SELECT权限及全局的PROCESS权限,不需要该数据库的LOCK TABLES权限。所以选项D正确。

3、知识点

3.1、知识点1:PROCESS权限

  • PROCESS权限控制对服务器内执行的线程信息的访问(即关于会话正在执行的语句的信息)。拥有PROCESS权限可以使用SHOW PROCESSLIST语句、mysqladmin processlist命令、INFORMATION_SCHEMA.PROCESSLIST表和Performance Schema processlist表获得线程信息。
  • 通过PROCESS权限,用户可以访问所有线程的信息,甚至是属于其他用户的线程。
  • 如果没有PROCESS权限,非匿名用户可以访问自己的线程信息,但不能访问其他用户的线程,而匿名用户不能访问线程信息。

官方参考文档

3.2、知识点2:mysqldump所需权限

  • mysqldump对于转储的表至少需要SELECT权限。
  • 用mysqldump导出一个数据库时,如果不使用–single-transaction选项,则需要该数据库的SELECT和LOCK TABLES权限,及全局的PROCESS权限。
  • 用mysqldump导出一个数据库时,如果使用–single-transaction选项,则只需要该数据库的SELECT权限及全局的PROCESS权限,不需要该数据库的LOCK TABLES权限。
  • 对于转储的视图需要SHOW VIEW权限,对于转储的触发器需要TRIGGER权限。
  • 要重新加载一个转储文件,你必须有执行它所包含的语句所需的权限,例如对这些语句所创建的对象有适当的CREATE权限。

官方参考文档

4、实验

4.1、实验1

4.1.1、实验目的

验证mysqldump所需的权限。

4.1.2、实验前准备

已安装并运行的MySQL5.7。

4.1.3、实验步骤

  1. 会话1(root用户):假设已存在待导出的数据库test1。先创建导出用户dump1,对其授予test1数据的SELECT权限:
mysql> CREATE USER dump1 IDENTIFIED by 'dump1';
mysql> GRANT SELECT ON test1.* TO dump1;
  1. 会话2(dump1用户):启动一个新会话,用dump1用户导出test1库,先不使用–single-transaction选项,发现报错,缺少LOCK TABLES权限:
$ mysqldump -udump1 -p test1  > test1.sql
Enter password: 
mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
mysqldump: Got error: 1044: Access denied for user 'dump1'@'%' to database 'test1' when using LOCK TABLES
  1. 会话1(root用户):对dump1授予LOCK TABLES权限:
mysql> GRANT LOCK TABLES ON test1.* TO dump1;
  1. 会话2(dump1用户):再次导出,发现提示缺少PROCESS权限:
[root@localhost ~]# mysqldump -udump1 -p test1  > test1.sql
Enter password: 
mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
  1. 会话1(root用户):再授予dump1用户PROCESS权限,注意PROCESS是全局权限,不能只在某个数据库上授予:
mysql> GRANT PROCESS ON *.* TO dump1;
  1. 会话2(dump1用户):再次导出,发觉可以成功:
$ mysqldump -udump1 -p test1  > test1.sql
Enter password: 
$ ls
test1.sql
  1. 会话1(root用户):将dump1的PROCESS和LOCK TABLES权限都删除:
mysql> REVOKE PROCESS ON *.* FROM dump1;
mysql> REVOKE LOCK TABLES ON test1.* FROM dump1;
mysql> SHOW GRANTS FOR dump1;
+------------------------------------------+
| Grants for dump1@%                       |
+------------------------------------------+
| GRANT USAGE ON *.* TO 'dump1'@'%'        |
| GRANT SELECT ON `test1`.* TO 'dump1'@'%' |
  1. 会话2(dump1用户):使用single-transaction选项导出,发觉错误,提示缺少PROCESS权限:
$ mysqldump -udump1 -p --single-transaction  test1  > test1.sql
Enter password: 
mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
  1. 会话1(root用户):再授予dump1用户PROCESS权限:
mysql> GRANT PROCESS ON *.* TO dump1;
  1. 会话2(dump1用户):这时发现使用single-transaction选项可以导出成功:
$ mysqldump -udump1 -p --single-transaction  test1  > test1.sql
Enter password: 

4.1.4、实验结论

  1. 用mysqldump导出一个数据库时,如果不使用–single-transaction选项,则需要该数据库的SELECT和LOCK TABLES权限,及全局的PROCESS权限。
  2. 用mysqldump导出一个数据库时,如果使用–single-transaction选项,则只需要该数据库的SELECT权限及全局的PROCESS权限,不需要该数据库的LOCK TABLES权限。

5、总结

  1. mysqldump导出表时至少需要SELECT权限。
  2. 用mysqldump导出一个数据库时,如果不使用–single-transaction选项,则需要该数据库的SELECT和LOCK TABLES权限,及全局的PROCESS权限。
  3. 用mysqldump导出一个数据库时,如果使用–single-transaction选项,则只需要该数据库的SELECT权限及全局的PROCESS权限,不需要该数据库的LOCK TABLES权限。
  4. 对于视图的导出需要SHOW VIEW权限,对于触发器的导出需要TRIGGER权限。
  5. 导入转储文件时,必须有执行它所包含的语句所需的权限,例如对这些语句所创建的对象有适当的CREATE权限。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值