一、MariaDB Role介绍
MariaDB从10.0/10.1版本开始支持role。
Role相当于各种权限的集合,可以给多个账户统一权限的修改直接通过修改role来实现,不需要每个账户一个一个的grant权限,方便运维和管理。role可以创建、删除、修改并作用到他管理的账户上。
Role优点:
1.在实际工作中,有大量的用户其权限是一样的,比如只读权限。如果每次在创建完用户后,DBA再去对每个用户去分别授权,那会是一件非常麻烦的事情。
2.使用role的好处是DBA只需对权限种类进行划分,然后将不同权限授予不同的role,而不必再去关注到底有哪些具体的用户。
3.当角色权限发生变化时,比如添加成员或者删除成员,系统管理员都无需执行任何关于权限的操作。
二、Role各种操作与注意事项
1.创建Role,并赋值给用户
1)新建Role,并赋予Role所有库的查询权限
create role v_select;
grant select on *.* to v_select;
2)新建测试用户,并将v_select Role赋值给测试用户
create user hope@'127.0.0.1' identified by 'hope';
flush privileges;
grant v_select to hope@'127.0.0.1';
3)测试用户登录数据库,并查询数据
此时用户查询不到数据,用户也没有拥有任何Role
4)测试用户激活Role,并查询
set default role 与set role都要执行,set role只能使当前session 的role生效,推出后再次登录,role失效。
set default role v_select;
set role v_select;
2、追加新的权限到Role
1)将create权限赋值给v_select Role
grant create on *.* to v_select;
以为v_select Role还没有drop table 的权限,所以用户hope不能删除表
2)将drop权限赋值给v_select
grant drop on *.* to v_select;
3、DDL与DML追加到Role,用户生效问题
1)DDL追加到Role
上面2中,已经验证DDL追加到Role后,需要当前用户退出当前session后再登录数据库才能生效。
2)DML追加到Role,当前session不生效,要退出后,再登录才能生效
grant insert on *.* to v_select;
4.撤销Role拥有的权限
撤销Role拥有的权限后,用户立即失去相应权限
revoke insert on *.* from v_select;
insert into test values(2);
ERROR 1142 (42000): INSERT command denied to user 'hope'@'127.0.0.1' for table 'test'
5.删除Role
drop role v_select;
删除role后,之前被赋值的用户,不再拥有任何权限