详解MySQL8的新特性ROLE
【MySQL的ROLE解决了什么问题】
假设你是一个职业素养良好的DBA比较同时又比较注重权限管理的话;可能遇到过这样的问题,数据库中有多个开发人员的账号;有一天要建
一个新的schema,如果你希望之前所有的账号都能操作这个schema下的表的话,在mysql-8.0之前你要对第一个账号都单独的赋一次权。
mysql-8.0.x所权限抽象了出来用ROLE来表示,当你为ROLE增加新的权限的时候,与这个ROLE关联的所有用户的权限也就一并变化了;针对
上面提到的场景在mysql-8.0.x下只要一条SQL就解决了。
【机智的MySQL开发】
MySQL引进ROLE用了一个非常机智的做法,既然ROLE是一堆权限的象征,这东西在MySQL里面本来就有呀!它就是USER呀。
1):创建角色
createroledevgroup;
查看mysql.user表真会被MySQL的机智给吓到
selectuser,hostfrommysql.user; +------------------+-----------+ |user|host| +------------------+-----------+ |devgroup|%| |backup|127.0.0.1| |mysql.sys|localhost| |root|localhost| +------------------+-----------+
说好的role事实上只是一个user呀!
2):给角色赋权
grantallontempdb.*todevgroup; QueryOK,0rowsaffected(0.07sec)
和操作用户比起来是一样一样的!
3):创建用户并把角色的权限赋给它
createusertom@'127.0.0.1'identifiedby'123456'; QueryOK,0rowsaffected(0.09sec) grantdevgrouptotom@'127.0.0.1'; QueryOK,0rowsaffected(0.09sec)
4):测试刚创建的用户是否可以登录
mysql-h127.0.0.1-P3306-utom-p123456 mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure. WelcometotheMySQLmonitor.Commandsendwith;or\g. YourMySQLconnectionidis16 Serverversion:8.0.13MySQLCommunityServer-GPL Copyright(c)2000,2018,Oracleand/oritsaffiliates.Allrightsreserved. OracleisaregisteredtrademarkofOracleCorporationand/orits affiliates.Othernamesmaybetrademarksoftheirrespective owners. Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement. mysql>showgrants; +-------------------------------------------+ |Grantsfortom@127.0.0.1| +-------------------------------------------+ |GRANTUSAGEON*.*TO`tom`@`127.0.0.1`| |GRANT`devgroup`@`%`TO`tom`@`127.0.0.1`| +-------------------------------------------+ 2rowsinset(0.00sec)
【角色和用户只是一个硬币的两面】
如果你还是觉得“角色”和“用户”是两个不一样的东西、那我只能是出大招了
1):root@127.0.0.1用户当成角色赋给刚才的tom用户
grantroot@'127.0.0.1'totom@'127.0.0.1'; QueryOK,0rowsaffected(0.04sec)
2):用户tom用户检察一下自己的权限
showgrants; +--------------------------------------------------------------+ |Grantsfortom@127.0.0.1| +--------------------------------------------------------------+ |GRANTUSAGEON*.*TO`tom`@`127.0.0.1`| |GRANT`devgroup`@`%`,`root`@`127.0.0.1`TO`tom`@`127.0.0.1`| +--------------------------------------------------------------+ 2rowsinset(0.00sec)
可以看到root@127.0.0.1的权限已经被套上去了、既然都是root用户的权限了我们来删除一个tempdb库看一下吧!
3):删库
dropdatabasetempdb; ERROR1044(42000):Accessdeniedforuser'tom'@'127.0.0.1'todatabase'tempdb'
看起来没有权限删除这个库呀!事实上是MySQL-8默认并不会激活role,关于是否激活role是由activate_all_roles_on_login这个参数控制的
4):开启activate_all_roles_on_login
set@@global.activate_all_roles_on_login=1; QueryOK,0rowsaffected(0.00sec)
5):重新登录一次tom再试着删除一下tempdb库
mysql-h127.0.0.1-P3306-utom-p123456 mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure. WelcometotheMySQLmonitor.Commandsendwith;or\g. YourMySQLconnectionidis18 Serverversion:8.0.13MySQLCommunityServer-GPL Copyright(c)2000,2018,Oracleand/oritsaffiliates.Allrightsreserved. OracleisaregisteredtrademarkofOracleCorporationand/orits affiliates.Othernamesmaybetrademarksoftheirrespective owners. Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement. mysql>usetempdb; Databasechanged mysql>showdatabases; +--------------------+ |Database| +--------------------+ |information_schema| |mysql| |performance_schema| |sys| |tempdb| +--------------------+ 5rowsinset(0.01sec) mysql>dropdatabasetempdb; QueryOK,0rowsaffected(0.09sec)
以上就是详解MySQL8的新特性ROLE的详细内容,更多关于MySQL8新特性ROLE的资料请关注毛票票其它相关文章!