MySQL OCP888题解030-代理用户技术

1、原题

1.1、英文原题

You have issued this statement:
GRANT PROXY ON ‘a’ FOR ‘b’;
When user account ‘b’ issues a query, the query returns an access denied error. What could have caused that error?
A. You have not set the proxy_user variable in the configuration file.
B. User account ‘b’ has not been granted permission to access the data being queried.
C. User account ‘a’ has not been granted permission to access the data being queried.
D. When connecting, user account ‘b’ is not entering the correct password for user account ‘a’.

1.2、中文翻译

您已发布此声明:
GRANT PROXY ON ‘a’ FOR ‘b’;
当用户帐户“b”发出查询时,查询将返回拒绝访问错误。是什么导致了这个错误?
A. 您尚未在配置文件中设置proxy_user变量。
B. 用户帐户“b”未被授予访问所查询数据的权限。
C. 用户帐户“a”未被授予访问所查询数据的权限。
D. 连接时,用户帐户“b”未为用户帐户“a”输入正确的密码。

1.3、答案

C

2、题目解析

2.1、题干解析

本题考察的是代理用户

2.2、选项解析

  1. 开启代理用户,只需要插件支持,并设置mysql_native_password_proxy_userscheck_proxy_usersON即可,不需要proxy_user变量。所以选项A错误。
  2. 既然考察代理用户技术,b的权限基本都来自于a,所以b没必要具备数据权限,所以选项B错误。
  3. 在这里a是被代理用户,b是代理用户,b查询没有权限,说明“a”未被授予访问所查询数据的权限。所以选项C正确。
  4. b虽然是代理了a,但登录时只需要输入b自己的密码,所以选项D错误。

3、知识点

3.1、知识点1:代理用户

所谓代理用户技术,就是MySQL服务器可以将连接的(外部)用户作为第二个用户的代理,从而也具有第二个用户的权限。

  • 第一个用户(外部用户)是 “代理用户”(一个可以冒充或成为另一个用户的用户)。
  • 第二个用户是 “被代理用户”(一个其身份和权限可由代理用户承担的用户)。

对代理用户支持的要求:

  • 代理必须得到支持,要么由插件本身,要么由代表插件的MySQL服务器支持。
  • 被代理用户必须存在,并被授予相应权限(即代理用户所需要的权限,否则无法执行数据操作)。
  • 代理用户必须拥有被代理用户的PROXY权限。为此要使用GRANT语句。

注意事项:

  • 通常情况下,被代理用户被配置为只能在代理情况下使用,而不能用于直接登录。

MySQL 5.7开始利用 ‘proxy’ 代理实现类似 ‘rols’ 角色管理功能,通过角色的概念管理数据库访问权限。 根据角色自身的设置不同,一个角色可以看做是一个数据库用户,或者一组数据库用户。 角色可以拥有数据库对象(比如,表)以及可以把这些对象上的权限赋予其它角色, 以控制谁拥有访问哪些对象的权限。另外,我们也可以把一个角色的成员 (membership)权限赋予其它角色,这样就允许成员角色使用它被赋予成员权限的角色之权限。

官方参考文档

3.N知识点N

4、实验

4.1、实验1:代理用户实验

参考文档

4.1.1、实验目的

学习代理用户的使用。

4.1.2、实验前准备

已安装并运行MySQL5.7。

4.1.3、实验步骤

  1. 启用代理用户映射:
mysql> SET @@global.check_proxy_users = ON;
mysql> SET @@global.mysql_native_password_proxy_users = ON;
  1. 创建被代理用户rols(一般也是角色用户)
mysql> create user 'rols_it'@'127.0.0.1';
  1. 创建代理用户tom
mysql> create user 'tom'@'127.0.0.1' identified by '123456';
  1. 将被代理用户rols的proxy权限授予代理用户tom
mysql> grant proxy on 'rols_it'@'127.0.0.1' to 'tom'@'127.0.0.1';
  1. 创建测试数据库it和表machines,并插入测试数据:
mysql> USE it;
mysql> CREATE TABLE machines(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, machine_name VARCHAR(10))ENGINE=InnoDB;
mysql> INSERT INTO machines SELECT NULL,'dell01';
mysql> INSERT INTO machines SELECT NULL,'dell02';
  1. 给被代理用户rols添加数据库it的查看权限
mysql> grant select ON it.* TO 'rols_it'@'127.0.0.1';
  1. 查看角色权限,即被代理用户权限:
mysql> show grants for 'rols_it'@'127.0.0.1';
+-------------------------------------------------+
| Grants for rols_it@127.0.0.1                    |
+-------------------------------------------------+
| GRANT USAGE ON *.* TO 'rols_it'@'127.0.0.1'     |
| GRANT SELECT ON `it`.* TO 'rols_it'@'127.0.0.1' |
  1. 查看代理用户tom的权限:
mysql> show grants for 'tom'@'127.0.0.1';
+-----------------------------------------------------------+
| Grants for tom@127.0.0.1                                  |
+-----------------------------------------------------------+
| GRANT USAGE ON *.* TO 'tom'@'127.0.0.1'                   |
| GRANT PROXY ON 'rols_it'@'127.0.0.1' TO 'tom'@'127.0.0.1' |
  1. 通过代理用户tom登录连接MySQL
[root@localhost ~]# mysql -utom -p123456 -h127.0.0.1
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.7.40-log MySQL Community Server (GPL)
......
  1. 查看代理用户tom可用的数据库,发觉it在里头。
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| it                 |
  1. 查询it库的machines表:
mysql> SELECT * FROM it.machines;
+----+--------------+
| id | machine_name |
+----+--------------+
|  1 | dell01       |
|  4 | dell02       |
+----+--------------+
2 rows in set (0.00 sec)
  1. 查看用户,可以看到如下所示。可以当使用代理用户时,USER()函数返回的是代理用户的名称,而CURRENT_USER()返回的是被代理用户。
mysql> SELECT USER(),CURRENT_USER();
+--------------+----------------+
| USER()       | CURRENT_USER() |
+--------------+----------------+
| 'tom'@'127.0.0.1' | 'rols_it'@'127.0.0.1'          |

5、总结

  1. MySQL5.7开始支持代理用户技术,即可以让一个用户A代理另一个用户B的权限,这里A就是代理用户,B就是被代理用户。当A代理B后,就具有B的所有权限。这样做的意义是,可以通过这样的方式,形成角色用户。角色用户是一个抽象用户,但具有该角色的各种权限,只需要对角色用户进行授权,然后将角色用户的代理权限授予需要这些权限的具体用户,就可以让具体用户拥有角色权限,从而方便的管理和授予权限。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值