1.角色的理解

角色是mysql8.0引入的新功能,在mysql中,角色是权限的集合,可以为角色添加或移除权限。引入角色的目的是方便管理拥有相同权限的用户。恰当的权限设定,可以确保数据的安全性,这是至关重要的。

2.创建角色

  1. CREATE ROLE 'role_name' [@'host_name'][,'role_name'[@'host_name']]...

如果host_name省略,默认为%,role_name不可省略,不可为空

create role 'manager'@'%';

3.给角色赋予权限

GRANT privileges ON table_name TO 'role_name'[@'host_name'];
show privileges\G;
GRANT all privileges on *.* to 'boss';
create role 'school_admin','school_read','school_write';
grant all privileges on test.* to 'school_admin';
grant select on test.* to 'school_read';
grant insert,update,delete on test.* to 'school_write'

4.查看角色的权限

show grants for 'manager'

5.回收角色的权限

REVOKE privileges ON tablename from 'rolename';
revoke insert,update,delete on school.* from 'school_write';
show grants for 'school_write'

6.删除角色

DROP ROLE role[,role2]

7.给用户赋予角色

角色创建并授权后,要赋给用户并处于激活状态才能发挥作用。
mysql中创建了角色之后,默认都是没有被激活,必须要手动激活。

GRANT role[,role,...] TO user[,user2...];
GRANT 'school_read' TO 'li4'@'localhost;'

8.激活角色

方式1:使用set default role命令激活角色

SET DEFAULT ROLE ALL TO 'li4'@'localhost'

方式2:将active_all_roles_on_login设置为ON

SET GLOBAL active_all_roles_on_login=ON;

这据sql的意思是,对所有角色永久激活。

9.撤销用户角色

REVOKE role FROM user;
REVOKE 'school_read' FROM 'kangshifu'@'localhost';

10.设置强制角色

强制角色是给每个创建账户的默认角色,不需要手动设置,强制角色无法被REVOKE或者DROP
方式1:服务启动前设置

[mysqld]
mandatory_roles='role1,role2@localhost'

方式2:运行时设置

SET PERSIST manadatory_roles = 'role1,role2@localhost' #系统重启后仍然有效
SET GLOBAL manadatory_roles = 'role1,role2@localhost';系统重启后失效