文章目录

  • 1、原题
  • 1.1、原题
  • 1.2、答案
  • 2、题目解析
  • 2.1、题干解析
  • 2.2、选项解析
  • 3、知识点
  • 3.1、知识点1:PROCESS权限
  • 3.2、知识点2:mysqldump所需权限
  • 4、实验
  • 4.1、实验1
  • 4.1.1、实验目的
  • 4.1.2、实验前准备
  • 4.1.3、实验步骤
  • 4.1.4、实验结论
  • 5、总结


1、原题

1.1、原题

mysql 用户dump权限 mysqldump需要什么权限_ocp

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权限。