MySQL 实战笔记 第01期:MySQL 角色管理

作者: admin 分类: 公众号存档            2 次浏览 发布时间: 2020-12-22 23:05

【转载声明】本文为转载文章,原作者「无为」,版权归原作者所有。 原文链接:https://mp.weixin.qq.com/s/LMHJ2yMM1m31Zsy_eZmf0w

公众号:杨建荣的学习笔记 · 作者:无为 · 发布:2020-12-22 23:05:50 · 原文链接

作者简介

无为,多年 MySQL DBA 工作经验,现就职于某知名互联网公司,对 MySQL、 Redis、PostgrepSQL 等主流数据库有一定了解,拥有丰富的一线运维经验。

角色 ( Role ) 可以用来批量管理用户,同一个角色下的用户,拥有相同的权限。那 MySQL 数据库是否也有这样的功能呢 ?

答案是肯定的。MySQL 5.7.X 可以通过 mysql.proxies_priv 来模拟角色 (Role) 的功能。下面让我们来实验一下(测试的版本 MySQL 5.7.28):

1 配置 proxy

mysql> show variables like "%proxy%"; #查看当前proxy是否开启,OFF 表示没有开启+-----------------------------------+-------+| Variable_name                     | Value |+-----------------------------------+-------+| check_proxy_users                 | OFF   || mysql_native_password_proxy_users | OFF   || proxy_user                        |       || sha256_password_proxy_users       | OFF   |+-----------------------------------+-------+4 rows in set (0.02 sec)
mysql> set global check_proxy_users =on;Query OK, 0 rows affected (0.00 sec)
mysql> set global mysql_native_password_proxy_users = on;Query OK, 0 rows affected (0.01 sec)
mysql> exit

以上设置参数,对当前会话无效,需要退出后重新登录,或直接设置到 my.cnf 中去;

2 创建角色和用户

mysql>  create user role_dba;Query OK, 0 rows affected (1.03 sec)
mysql> create user 'jack';Query OK, 0 rows affected (0.01 sec)
mysql> create user 'mary';Query OK, 0 rows affected (0.01 sec)

用户为设置密码,如需密码可以使用 identified by ‘####’ 设置;

3 权限映射

将 role_dba 的权限映射( map )到 jack 、mary

mysql> grant proxy on role_dba to jack;Query OK, 0 rows affected (0.02 sec)
mysql> grant proxy on role_dba to mary;Query OK, 0 rows affected (0.01 sec)

4 给用户赋权

给 role_dba 赋权(模拟 role 赋权)

mysql> grant select on *.* to role_dba;Query OK, 0 rows affected (0.01 sec)
mysql> show grants for role_dba;+---------------------------------------+| Grants for role_dba@%                 |+---------------------------------------+| GRANT SELECT ON *.* TO 'role_dba'@'%' |+---------------------------------------+1 row in set (0.00 sec)
mysql> show grants for jack;+---------------------------------------------+| Grants for jack@%                           |+---------------------------------------------+| GRANT USAGE ON *.* TO 'jack'@'%'            || GRANT PROXY ON 'role_dba'@'%' TO 'jack'@'%' |+---------------------------------------------+2 rows in set (0.00 sec)
mysql> show grants for mary;+---------------------------------------------+| Grants for mary@%                           |+---------------------------------------------+| GRANT USAGE ON *.* TO 'mary'@'%'            || GRANT PROXY ON 'role_dba'@'%' TO 'mary'@'%' |+---------------------------------------------+2 rows in set (0.00 sec)

5 查看 mysql.proxies_priv

mysql> select * from mysql.proxies_priv;+-----------+------+--------------+--------------+------------+----------------------+---------------------+| Host      | User | Proxied_host | Proxied_user | With_grant | Grantor              | Timestamp           |+-----------+------+--------------+--------------+------------+----------------------+---------------------+| localhost | root |              |              |          1 | boot@connecting host | 0000-00-00 00:00:00 || %         | will | %            | will_dba     |          0 | root@localhost       | 0000-00-00 00:00:00 || %         | tom  | %            | will_dba     |          0 | root@localhost       | 0000-00-00 00:00:00 || %         | jack | %            | role_dba     |          0 | root@localhost       | 0000-00-00 00:00:00 || %         | mary | %            | role_dba     |          0 | root@localhost       | 0000-00-00 00:00:00 |+-----------+------+--------------+--------------+------------+----------------------+---------------------+5 rows in set (0.01 sec)

6 验证

$ mysql -h 127.0.0.1 -u jack 
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 249
Server version: 5.7.28-log MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select * from test.ssd limit 1;
+---+------+------+
| a | b  | c  |
+---+------+------+
| 1 | NULL | NULL |
+---+------+------+
1 row in set (0.01 sec)

mysql.proxies_priv 仅仅是对 Role 的模拟,和 Oracle 的角色还是有所不同的;官方称呼为 Role like。

MySQL 8.0 正式增加了 role 功能,有兴趣的同学可以自行了解。

MySQL 5.6.X 模拟 Role 功能需要安装插件,具体方法可参考:

https://dev.mysql.com/doc/refman/5.6/en/proxy-users.html

https://dev.mysql.com/doc/refman/5.6/en/pluggable-authentication.html

另外,悦专栏欢迎各位大牛投稿,内容可以是数据库、开发、算法、大数据、运维、产品、运营等。只要在公众号回复“投稿”即可。

LIKECOLUMN

悦专栏

在这里,学好编程

做更优秀的 IT人!

各大平台都可以找到我

  • 微信公众号:杨建荣的学习笔记

  • Github:@jeanron100

  • CSDN:@jeanron100

  • 知乎:@jeanron100

  • 头条号:@杨建荣的学习笔记

  • 网易号:@杨建荣的数据库笔记

  • 大鱼号:@杨建荣的数据库笔记

  • 百家号:@杨建荣的数据库笔记

  • 腾讯云+社区:@杨建荣的学习笔记

QQ群号:763628645

QQ群二维码如下, 添加请注明:姓名+地区+职位,否则不予通过

admin

杨建荣,《Oracle DBA工作笔记》《MySQL DBA工作笔记》作者,dbaplus社群发起人之一,腾讯云TVP,现任竞技世界系统部经理,拥有十多年数据库开发和运维经验,目前专注于开源技术、运维自动化和性能调优

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注