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的语法来进行查询。

这块儿的东西需要抽丝剥茧,一点一点来,时间原因,先到这里。未完,待续。。。