创建角色
引入角色的目的是方便管理拥有相同权限的用户。恰当的权限设定,可以确保数据的安全性。
语法
CREATE ROLE 'role_name'[@'host_name'] [,'role_name'[@'host_name']]...
创建一个经理的角色
create role manager@'localhost';
给角色赋予权限
创建角色之后,这个角色默认是没有任何权限的,我们需要给这个角色赋予权限。
语法
GRANT privileges ON table_name TO 'role_name'[@'host_name'];
privileges代表权限的名称,多个权限以逗号隔开。可使用SHOW语句查询权限名称
show privileges;
给manager角色授予查询权限
grant select on dbtest01.employees to manager@'localhost';
查看角色的权限
show grants for manager@'localhost';
创建角色后,系统默认就会自动给你一个“USAGE”权限,意思是连接登录数据库的权限 。
回收角色的权限
语法
REVOKE privileges ON tablename FROM 'rolename';
回收manager的delete权限
revoke delete on dbtest01.employees from manager@'localhost';
删除角色
语法
DROP ROLE role [,role2]...
drop role admin;
给用户赋予角色
角色创建并授权后,要赋给用户并处于激活状态才能发挥作用。给用户添加角色可使用GRANT语句,语法形式如下:
GRANT role [,role2,...] TO user [,user2,...];
给用户 lisi 赋予 manager 角色
grant manager@'%' to lisi@'%';
查看是否添加成功
show grant for lisi@'%';
使用此用户登录,如果角色未激活,使用select current_role(); 语句进行查询的时候,会显示NONE
激活角色
方式1:使用set default role 命令激活角色
set default role all to lisi@'%';
方式2:将activate_all_roles_on_login设置为ON
默认情况
设置
SET GLOBAL activate_all_roles_on_login=ON;
这条 SQL 语句的意思是,对所有角色永久激活。运行这条语句之后,用户才真正拥有了赋予角色的所有权限。
撤销用户的角色
REVOKE role FROM user;
revoke manager@'localhost' from lisi@'%';
设置强制角色
方式1:服务启动前设置
[mysqld]
mandatory_roles='role1,role2@localhost,r3@%.example.com'
方式2:运行时设置
SET PERSIST mandatory_roles = 'role1,role2@localhost,r3@%.example.com'; #系统重启后仍然
有效
SET GLOBAL mandatory_roles = 'role1,role2@localhost,r3@%.example.com'; #系统重启后失