MySQL8.0角色管理—(一)
- 2020 年 2 月 25 日
- 筆記
//
MySQL8.0角色管理—(一)
//
今天看了看MySQL8.0官方文档的角色管理部分,写点东西总结下这块的内容吧。
01
啥是角色?
官方文档的第一句话,就开门见山的告诉了我们角色是什么东西。A MySQL role is a named collection of privileges. Like user accounts, roles can have privileges granted to and revoked from them.
不难看出,MySQL角色是"权限的集合",我们可以像账号那样,回收或者授予一个角色的权限。
我们可以将某个角色赋予某个用户,然后这个用户就拥有了这个角色下的所有权限,这种方法使得我们可以定义不同的角色来分配给不同的用户。例如我们可以定义"开发者角色","只读角色","读写角色"等等,不同的角色对应不同的权限。这样,对于开发人员张三、李四,我们只需要将"开发者角色"授予他们的个人账号即可,对于某些查询用户,只需要授予"只读角色",对于业务账号,要授予数据库的"读写角色"
02
角色支持的操作有哪些?
支持的操作,也就是角色的管理,下面是角色管理支持的语法:
1、CREATE ROLE和DROP ROLE创建和删除角色。
2、GRANT和REVOKE分配或回收用户帐户和角色的权限。
3、SHOW GRANTS显示用户帐户和角色的特权和角色分配。
4、SET DEFAULT ROLE指定默认情况下哪些帐户角色处于活动状态。
5、SET ROLE更改当前会话中的活动角色。
6、CURRENT_ROLE()函数显示当前会话中的活动角色。
7、当用户登录到服务器时,系统变量essentially_roles和activate_all_roles_on_login允许定义强制性角色和自动激活授予的角色。
光是罗列,不太容易理解,来看几个例子吧:
创建角色、删除角色:
mysql> create role "role_ro","role_rw","role_dev"; Query OK, 0 rows affected (0.07 sec) mysql> create role "role_test"@"localhost"; Query OK, 0 rows affected (0.01 sec) mysql> drop role "role_test"@"localhost"; Query OK, 0 rows affected (0.01 sec) mysql> drop role "role_ro","role_rw","role_dev"; Query OK, 0 rows affected (0.00 sec)
分配权限给特定角色:
#创建两个角色,role_ro和role_rw mysql> create role "role_ro","role_rw"; Query OK, 0 rows affected (0.00 sec) #授予role_ro select权限,授予role_rw增删改查权限 mysql> grant select,show databases on yeyz.* to "role_ro"; Query OK, 0 rows affected (0.01 sec) mysql> grant select,insert,update,delete,show databases on yeyz.* to "role_rw"; Query OK, 0 rows affected (0.01 sec) #创建两个用户yeyz_ro和yeyz_rw mysql> create user yeyz_ro@'%' identified by 'yeyz'; Query OK, 0 rows affected (0.01 sec) mysql> create user yeyz_rw@'%' identified by 'yeyz'; Query OK, 0 rows affected (0.01 sec) #将两个角色role_ro和role_rw,分别对应的映射到用户yeyz_ro和yeyz_rw上 mysql> grant 'role_ro' to yeyz_ro@'%'; Query OK, 0 rows affected (0.01 sec) mysql> grant 'role_rw' to yeyz_rw@'%'; Query OK, 0 rows affected (0.00 sec)
分类好了权限,我们来对权限进行查看:
#查看账号权限,发现只能查看到角色和usage权限 mysql> show grants for yeyz_ro@'%'; +--------------------------------------+ | Grants for yeyz_ro@% | +--------------------------------------+ | GRANT USAGE ON *.* TO `yeyz_ro`@`%` | | GRANT `role_ro`@`%` TO `yeyz_ro`@`%` | +--------------------------------------+ 2 rows in set (0.00 sec) #使用using语法查看账号所拥有的的角色的权限 mysql> show grants for yeyz_ro@'%' using 'role_ro'; +----------------------------------------------+ | Grants for yeyz_ro@% | +----------------------------------------------+ | GRANT SHOW DATABASES ON *.* TO `yeyz_ro`@`%` | | GRANT SELECT ON `yeyz`.* TO `yeyz_ro`@`%` | | GRANT `role_ro`@`%` TO `yeyz_ro`@`%` | +----------------------------------------------+ 3 rows in set (0.00 sec)
注意到,使用一般的show grants方法只能查看到账号拥有哪些角色,关于角色的具体权限,可以使用using的语法来进行查询。
这块儿的东西需要抽丝剥茧,一点一点来,时间原因,先到这里。未完,待续。。。