MySQL角色功能有哪些
本篇内容介绍了“MySQL角色功能有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
1. role 简介
role 角色功能对于 Oracle 数据库来说不算是什么特殊,在 Oracle 中经常被用到。MySQL 8.0 版本终于新增了 role 功能,为数据库用户权限管理提供了一种新思路。
role 可以看做一个权限的集合,这个集合有一个统一的名字 role 名。可以给多个数据库用户授予同个 role 的权限,权限变更可直接通过修改 role 来实现,不需要每个用户一个一个的去变更,方便运维和管理。role 可以创建、删除、修改并作用到它管理的用户上。
下面我们具体来体验下 role 角色功能:
#创建rolemysql>createrole'dev_role';QueryOK,0rowsaffected(0.15sec)#给role授予权限mysql>grantselectondb1.*to'dev_role'@'%';QueryOK,0rowsaffected(0.12sec)#查看role的权限mysql>showgrantsfor'dev_role'@'%';+-------------------------------------------+|Grantsfordev_role@%|+-------------------------------------------+|GRANTUSAGEON*.*TO`dev_role`@`%`||GRANTSELECTON`db1`.*TO`dev_role`@`%`|+-------------------------------------------+#创建用户并赋予角色权限mysql>createuser'dev1'@'%'identifiedby'123456';QueryOK,0rowsaffected(0.68sec)mysql>grant'dev_role'to'dev1'@'%';QueryOK,0rowsaffected(0.38sec)#查看用户权限mysql>showgrantsfor'dev1'@'%';+------------------------------------+|Grantsfordev1@%|+------------------------------------+|GRANTUSAGEON*.*TO`dev1`@`%`||GRANT`dev_role`@`%`TO`dev1`@`%`|+------------------------------------+2rowsinset(0.63sec)#使用dev1用户登录root@localhost~]#mysql-udev1-p123456mysql>showdatabases;+--------------------+|Database|+--------------------+|information_schema|+--------------------+1rowinset(0.34sec)mysql>selectCURRENT_ROLE();+----------------+|CURRENT_ROLE()|+----------------+|NONE|+----------------+1rowinset(0.59sec)
什么情况?貌似和我们想象不同,赋予用户某个角色权限后,该用户并没有获得相应权限。
出现上述情况的原因是,在用户会话中,授予该用户的角色处于非活动状态。只有授予的角色在会话中处于活动状态时,该用户才拥有此角色的权限,要确定当前会话中哪些角色处于活动状态,可以使用 CURRENT_ROLE() 函数。
#使用setdefaultrole命令激活角色mysql>SETDEFAULTROLEALLTOdev1;QueryOK,0rowsaffected(0.77sec)#重新登录发现权限正常root@localhost~]#mysql-udev1-p123456mysql>selectCURRENT_ROLE();+----------------+|CURRENT_ROLE()|+----------------+|`dev_role`@`%`|+----------------+1rowinset(0.57sec)mysql>showdatabases;+--------------------+|Database|+--------------------+|db1||information_schema|+--------------------+2rowsinset(1.05sec)
除了使用 set default role 命令激活角色外,还可以修改系统变量 activate_all_roles_on_login ,该变量决定是否自动激活 role ,默认为 OFF 即不自动激活,建议将该变量改为 ON ,这样以后赋予角色给新用户后就不需要再手动激活了。
#查看activate_all_roles_on_login变量mysql>showvariableslike'activate_all_roles_on_login';+-----------------------------+-------+|Variable_name|Value|+-----------------------------+-------+|activate_all_roles_on_login|OFF|+-----------------------------+-------+1rowinset(1.53sec)#启用该变量先动态启用之后可以将此参数加入my.cnf配置文件中mysql>setglobalactivate_all_roles_on_login=on;QueryOK,0rowsaffected(0.50sec)#之后角色就会自动激活mysql>createuser'dev2'@'%'identifiedby'123456';QueryOK,0rowsaffected(0.68sec)mysql>grant'dev_role'to'dev2'@'%';QueryOK,0rowsaffected(0.38sec)root@localhost~]#mysql-udev2-p123456mysql>selectCURRENT_ROLE();+----------------+|CURRENT_ROLE()|+----------------+|`dev_role`@`%`|+----------------+1rowinset(0.57sec)mysql>showdatabases;+--------------------+|Database|+--------------------+|db1||information_schema|+--------------------+2rowsinset(1.05sec)
2. role 相关操作
上面我们介绍了创建角色及给用户授予角色权限,关于 role 相关操作还有很多,我们接着来看下。
#变更角色权限mysql>grantselectondb2.*to'dev_role'@'%';QueryOK,0rowsaffected(0.33sec)#拥有该角色的用户重新登录后权限也会对应变化root@localhost~]#mysql-udev1-p123456mysql>showdatabases;+--------------------+|Database|+--------------------+|db1||db2||information_schema|+--------------------+3rowsinset(2.01sec)#回收角色权限mysql>revokeSELECTONdb2.*from'dev_role'@'%';QueryOK,0rowsaffected(0.31sec)#撤销用户的角色mysql>revoke'dev_role'@'%'from'dev1'@'%';QueryOK,0rowsaffected(0.72sec)mysql>showgrantsfor'dev1'@'%';+----------------------------------+|Grantsfordev1@%|+----------------------------------+|GRANTUSAGEON*.*TO`dev1`@`%`|+----------------------------------+1rowinset(1.06sec)#删除角色(删除角色后对应的用户也会失去该角色的权限)mysql>droproledev_role;QueryOK,0rowsaffected(0.89sec)
我们还可以通过 mandatory_roles 变量来配置强制性角色。使用强制性角色,服务器会为全部的用户户默认赋予该角色,而不需要显示执行授予角色。可以使用 my.cnf 文件或者使用 SET PERSIST 进行配置,例如:
#my.cnf配置[mysqld]mandatory_roles='dev_role'#set更改变量SETPERSISTmandatory_roles='dev_role';
需要注意的是,配置在 mandatory_roles 中的角色不能撤销其权限,也不能删除。
总结:
关于 role 角色相关知识,简单总结几点如下:
role 是一个权限的集合,可以被赋予不同权限。
开启 activate_all_roles_on_login 变量,才可以自动激活角色。
一个用户可以拥有多个角色,一个角色也可以授予多个用户。
角色权限变化会应用到对应用户。
删除角色,则拥有此角色的用户也会丧失此角色的权限。
可设置强制性角色,使得所有用户都拥有此角色的权限。
角色管理和用户管理相似,只是角色不能用于登录数据库。
“MySQL角色功能有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。