可以分配数据库中相应的权限,那么角色的作用是什么?数据库中的角色是一组命名的权限。为了对众多具有相似权限的用户进行分类管理,定义了角色的概念。与用户帐户一样,角色可以授予和撤销其特权。例如:当多个用户分配复杂而详细的权限时,角色的作用就体现出来了。就是给一个角色分配一堆权限。新用户只要使用这个角色,就可以拥有相应的权限。本文将探讨如何在MySQL8.0中实现角色。角色相关命令及配置方法:1.命令接口:命令说明CREATEROLE和DROPROLE创建和删除角色GRANT和REVOKE是否激活角色SHOWGRANTS显示账户/角色或角色拥有的权限SETDEFAULTROLE设置什么role账户默认使用的角色SETROLE更改当前会话的角色CURRENT_ROLE()显示当前会话的角色WITHADMINOPTION授予和撤销其他用户或角色2.my.cnf配置参数:参数说明mandatory_roles允许定义mandatoryroleswhenusersloginactivate_all_roles_on_login是否激活角色与users的区别1、创建的用户和角色都在mysql.user表中:备注:区别在于account_locked、password_expired2、查看对应的mysql库后发现,没有特殊的角色相关表。是不是可以理解为role其实就是一个user呢?,就是没有密码就不能登录,被锁了。ALTERUSER'role_developer'@'%'IDENTIFIEDBY'123456';ALTERUSER'role_developer'@'%'ACCOUNTUNLOCK;备注:角色账号,发现可以正常登录。这里可以大致理解一下,其实角色和用户是平等的。只是被关系绑在一起。突破常识,值得借鉴。看到这里,就比较简单易懂了,大致就明白了。下面是练习SQL语句。例1.创建角色mysql>DROPROLEIFEXISTS'role_developer'@'%','role_read'@'%','role_write'@'%';CREATEROLE'role_developer'@'%','role_read'@'%','role_write'@'%';2.授予权限mysql>GRANTALLONworld.*TO'role_developer';GRANTSELECTONworld.*TO'role_read';GRANTINSERT,UPDATE,DELETEONworld.*TO'role_write';3.创建用户mysql>DROPUSERIFEXISTS'user_dev'@'%','user_read'@'%','user_write'@'%';CREATEUSER'user_dev'@'%'IDENTIFIEDBY'123456';CREATEUSER'user_read'@'%'IDENTIFIEDBY'123456';CREATEUSER'user_write'@'%'IDENTIFIEDBY'123456';4、查询用户表状态mysql>SELECTuser,host,account_locked,password_expiredFROMmysql.userWHEREuserLIKE'user_%'ORuserLIKE'role_%';5.角色授予和撤销:mysql>GRANT'role_developer'@'%'TO'user_dev'@'%';GRANT'role_developer'@'%'TO'user_read'@'%'WITHADMINOPTION;GRANT'role_write'@'%'TO'user_write'@'%'WITHadminOPTION;##RecycleRole#REVOKE'role_developer'@'%'FROM'user_dev'@'%';#REVOKE'role_developer'@'%'FROM'user_read'@'%';#REVOKE'role_write'@'%'FROM'user_write'@'%';6.激活ROLEmysql>SETDEFAULTROLEALLTO'user_dev'@'%';SETDEFAULTROLEALLTO'user_read'@'%';SETDEFAULTROLEALLTO'user_write'@'%';7.ROLE操作mysql>SETROLENONE;#NoroleSETROLEALLEXCEPT'role_write';#除了命名角色之外的所有角色SETROLEALL;#所有角色。SELECTCURRENT_ROLE();#当前角色8.强制给所有用户分配角色,启动角色方法mysql>SETPERSISTmandatory_roles='role1,role2@%,r3@%.example.com';SETPERSISTactivate_all_roles_on_login=ON;[msyqld]mandatory_roles='role_developer'activate_all_roles_on_login=ONactivate_all_roles_on_login:服务器在登录时激活每个帐户的所有角色。这优先于使用SETdefaultROLE指定的默认角色。它也仅适用于在定义器上下文中执行的存储过程和视图的执行开始时。9.其他ROLES_GRAPHML:返回带有用户信息的utf8字符串xml(graphml),应该由用户api接口扩展。mysql>SELECTROLES_GRAPHML()总结:方便用户分类管理,在实际场景中用的不多。角色和用户是可互操作的。参考:https://dev.mysql.com/doc/refman/8.0/en/roles.html莫天伦原文链接:https://www.modb.pro/db/688988作者简介崔虎龙,云和恩莫MySQL技术顾问,长期服务于金融、游戏、物流等行业数据中心,设计数据存储架构,熟悉数据中心运营管理、自动化运维等流程和规范。擅长MySQL、Redis、MongoDB数据库高可用设计与运维故障排除、备份恢复、升级迁移、性能优化。自学通过MySQLOCP5.6和MySQLOCP5.7认证。2年以上开发经验,10年数据库运维工作经验,其中8年全职MySQL工作;曾担任项目经理、数据库经理、数据仓库架构师、MySQL技术专家、DBA等职位;相关行业:金融(银行业、财务管理)、物流、游戏、医疗、重工业等。
