目录
一、角色的理解:
msyql引入角色的目的是方便管理具有相同权限的用户。类似于Linux中的用户组,将多个权限封装在一起赋给某个角色。如员工这角色,同一等级员工权限是一样的,假如再有新的员工要加入,管理者不用再将权限一一设置,只需要将员工这角色(权限)赋给新员工即可。
二、角色的使用:
1.创建角色
CREATE ROLE 'role_name'[@'host_name'] [,'role_name'[@'host_name']]...
#角色名称的命名规则和用户名类似。如果host_name省略,默认为% ,role_name不可省略,不能为空。
注意,创建的角色被视为一个特殊的用户,它的定义(如用户名、主机名)记录在mysql.user表中。
2.给角色赋权
#创建角色之后,默认这个角色是没有任何权限的,我们需要给角色授权。
GRANT 权限1,权限2,...权限n ON table_name TO 'role_name'[@'host_name'];
3.查看角色权限
SHOW GRANTS FOR 'role_name';
4.回收角色权限
REVOKE privileges ON tablename FROM 'rolename';
5.删除角色
DROP ROLE role [,role2]...
注意, 如果你删除了角色,那么用户也就失去了通过这个角色所获得的所有权限。
6.给用户赋角色
角色创建并授权后,要赋给用户并处于激活状态才能发挥作用。(默认是未激活的)
#给用户添加角色
GRANT role [,role2,...] TO user [,user2,...];
#添加完成后使用SHOW语句查看是否添加成功
SHOW GRANTS FOR 'kangshifu'@'localhost';
#登录用户,并查询当前用户的角色
SELECT CURRENT_ROLE();
7.激活角色
方式1:使用set default role 命令激活角色(服务重启后仍有效)
#举例:使用SET DEFAULT ROLE 为下面4个用户默认激活所有已拥有的角色如下:
SET DEFAULT ROLE ALL TO
'dev1'@'localhost',
'read_user1'@'localhost',
'read_user2'@'localhost',
'rw_user1'@'localhost';
方式2:将activate_all_roles_on_login设置为ON
#登录时激活所有角色默认是关闭的,可通过下列命令查看
show variables like 'activate_all_roles_on_login';
#设置为开启(对所有角色永久激活)
SET GLOBAL activate_all_roles_on_login=ON;
8.撤销用户的角色
#撤销用户角色
REVOKE role FROM user;
#eg: REVOKE 'school_read' FROM 'kangshifu'@'localhost';
#查看用户的角色信息
SHOW GRANTS FOR 'kangshifu'@'localhost';
9.设置强制角色(即初始默认角色)
方式一:服务启动前设置,修改/etc/my.cf配置文件
[mysqld]
mandatory_roles='role1,role2@localhost,r3@%.atguigu.com'
方式二:运行时设置
#持久化设置,系统重启后仍然有效
SET PERSIST mandatory_roles = 'role1,role2@localhost,r3@%.example.com';
#系统重启后失效
SET GLOBAL mandatory_roles = 'role1,role2@localhost,r3@%.example.com';