角色管理
- 创建角色
CREATE ROLE 'role_name'[@'host_name'] [,'role_name'[@'host_name']]...
# 如果 host_name省略,默认为% , role_name不可省略 ,不可为空
- 代码案例
CREATE ROLE 'manager'@'localhost';
- 给角色赋予权限
GRANT privileges ON table_name TO 'role_name'[@'host_name'];
- 代码案例
GRANT SELECT ON demo.settlement TO 'manager';
GRANT SELECT ON demo.goodsmaster TO 'manager';
GRANT SELECT ON demo.invcount TO 'manager';
- 查看角色拥有的权限
SHOW GRANTS FOR 'manager';
- 撤销角色的权限
REVOKE privileges ON tablename FROM 'rolename';
- 代码案例
# 撤销school_write角色的权限
REVOKE INSERT, UPDATE, DELETE ON school.* FROM 'school_write';
- 删除角色
DROP ROLE role [,role2]...
- 代码案例
DROP ROLE 'school_read';
- 给用户赋予角色
GRANT role [,role2,...] TO user [,user2,...];
- 代码案例
# 给kangshifu用户添加角色school_read权限
GRANT 'school_read' TO 'kangshifu'@'localhost';
- 查看用户是否添加角色成功
SHOW GRANTS FOR 'kangshifu'@'localhost';
-
角色创建并授权后,要赋给用户并处于 激活状态 才能发挥作用
-
为用户激活角色
SET DEFAULT ROLE ALL TO 'kangshifu'@'localhost';
- 为多个用户激活该用户下的角色权限
SET DEFAULT ROLE ALL TO
'dev1'@'localhost',
'read_user1'@'localhost',
'read_user2'@'localhost',
'rw_user1'@'localhost';
- 方式2:对所有角色永久激活
SET GLOBAL activate_all_roles_on_login=ON;
# 查看是否激活成功
show variables like 'activate_all_roles_on_login';
- 撤销用户角色
REVOKE role FROM user;
- 代码案例
# 撤销kangshifu用户的school_read角色
REVOKE 'school_read' FROM 'kangshifu'@'localhost';
# 查看是否撤销成功
SHOW GRANTS FOR 'kangshifu'@'localhost';
- 强制角色
# 强制角色是给每个创建账户的默认角色,不需要手动设置。强制角色无法被REVOKE或者DROP
# 方式一:服务器启动前设置
mandatory_role='role1,role2@localhost,r3@%'
# 方式二:运行时设置
set persist mandatory_roles='role1,role2@localhost,r3@exanple.com'; # 系统重启后仍然有效
set global mandatory_roles = 'role1,role2@localhost,r3@exanple.com'; # 系统重启后失效