MySQL 角色(role)功能介紹
:
上篇文章,我們介紹了 MySQL 權(quán)限管理相關(guān)知識。當(dāng)數(shù)據(jù)庫實(shí)例中存在大量的庫或用戶時,權(quán)限管理將會變得越來越繁瑣,可能要頻繁進(jìn)行權(quán)限變更。MySQL 8.0 新增了 role 功能,使得權(quán)限管理更加方便,本篇文章我們來看下 8.0 下的 role 功能。
1. role 簡介
role 角色功能對于 Oracle 數(shù)據(jù)庫來說不算是什么特殊,在 Oracle 中經(jīng)常被用到。MySQL 8.0 版本終于新增了 role 功能,為數(shù)據(jù)庫用戶權(quán)限管理提供了一種新思路。
role 可以看做一個權(quán)限的集合,這個集合有一個統(tǒng)一的名字 role 名??梢越o多個數(shù)據(jù)庫用戶授予同個 role 的權(quán)限,權(quán)限變更可直接通過修改 role 來實(shí)現(xiàn),不需要每個用戶一個一個的去變更,方便運(yùn)維和管理。role 可以創(chuàng)建、刪除、修改并作用到它管理的用戶上。
下面我們具體來體驗(yàn)下 role 角色功能:
#創(chuàng)建role mysql>createrole'dev_role'; QueryOK,0rowsaffected(0.15sec) #給role授予權(quán)限 mysql>grantselectondb1.*to'dev_role'@'%'; QueryOK,0rowsaffected(0.12sec) #查看role的權(quán)限 mysql>showgrantsfor'dev_role'@'%'; +-------------------------------------------+ |Grantsfordev_role@%| +-------------------------------------------+ |GRANTUSAGEON*.*TO`dev_role`@`%`| |GRANTSELECTON`db1`.*TO`dev_role`@`%`| +-------------------------------------------+ #創(chuàng)建用戶并賦予角色權(quán)限 mysql>createuser'dev1'@'%'identifiedby'123456'; QueryOK,0rowsaffected(0.68sec) mysql>grant'dev_role'to'dev1'@'%'; QueryOK,0rowsaffected(0.38sec) #查看用戶權(quán)限 mysql>showgrantsfor'dev1'@'%'; +------------------------------------+ |Grantsfordev1@%| +------------------------------------+ |GRANTUSAGEON*.*TO`dev1`@`%`| |GRANT`dev_role`@`%`TO`dev1`@`%`| +------------------------------------+ 2rowsinset(0.63sec) #使用dev1用戶登錄 root@localhost~]#mysql-udev1-p123456 mysql>showdatabases; +--------------------+ |Database| +--------------------+ |information_schema| +--------------------+ 1rowinset(0.34sec) mysql>selectCURRENT_ROLE(); +----------------+ |CURRENT_ROLE()| +----------------+ |NONE| +----------------+ 1rowinset(0.59sec)
什么情況?貌似和我們想象不同,賦予用戶某個角色權(quán)限后,該用戶并沒有獲得相應(yīng)權(quán)限。
出現(xiàn)上述情況的原因是,在用戶會話中,授予該用戶的角色處于非活動狀態(tài)。只有授予的角色在會話中處于活動狀態(tài)時,該用戶才擁有此角色的權(quán)限,要確定當(dāng)前會話中哪些角色處于活動狀態(tài),可以使用 CURRENT_ROLE() 函數(shù)。
#使用setdefaultrole命令激活角色 mysql>SETDEFAULTROLEALLTOdev1; QueryOK,0rowsaffected(0.77sec) #重新登錄發(fā)現(xiàn)權(quán)限正常 root@localhost~]#mysql-udev1-p123456 mysql>selectCURRENT_ROLE(); +----------------+ |CURRENT_ROLE()| +----------------+ |`dev_role`@`%`| +----------------+ 1rowinset(0.57sec) mysql>showdatabases; +--------------------+ |Database| +--------------------+ |db1| |information_schema| +--------------------+ 2rowsinset(1.05sec)
除了使用 set default role 命令激活角色外,還可以修改系統(tǒng)變量 activate_all_roles_on_login ,該變量決定是否自動激活 role ,默認(rèn)為 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) #啟用該變量先動態(tài)啟用之后可以將此參數(shù)加入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-p123456 mysql>selectCURRENT_ROLE(); +----------------+ |CURRENT_ROLE()| +----------------+ |`dev_role`@`%`| +----------------+ 1rowinset(0.57sec) mysql>showdatabases; +--------------------+ |Database| +--------------------+ |db1| |information_schema| +--------------------+ 2rowsinset(1.05sec)
2. role 相關(guān)操作
上面我們介紹了創(chuàng)建角色及給用戶授予角色權(quán)限,關(guān)于 role 相關(guān)操作還有很多,我們接著來看下。
#變更角色權(quán)限 mysql>grantselectondb2.*to'dev_role'@'%'; QueryOK,0rowsaffected(0.33sec) #擁有該角色的用戶重新登錄后權(quán)限也會對應(yīng)變化 root@localhost~]#mysql-udev1-p123456 mysql>showdatabases; +--------------------+ |Database| +--------------------+ |db1| |db2| |information_schema| +--------------------+ 3rowsinset(2.01sec) #回收角色權(quán)限 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) #刪除角色(刪除角色后對應(yīng)的用戶也會失去該角色的權(quán)限) mysql>droproledev_role; QueryOK,0rowsaffected(0.89sec)
我們還可以通過 mandatory_roles 變量來配置強(qiáng)制性角色。使用強(qiáng)制性角色,服務(wù)器會為全部的用戶戶默認(rèn)賦予該角色,而不需要顯示執(zhí)行授予角色??梢允褂?my.cnf 文件或者使用 SET PERSIST 進(jìn)行配置,例如:
#my.cnf配置 [mysqld] mandatory_roles='dev_role' #set更改變量 SETPERSISTmandatory_roles='dev_role';
需要注意的是,配置在 mandatory_roles 中的角色不能撤銷其權(quán)限,也不能刪除。
總結(jié):
關(guān)于 role 角色相關(guān)知識,簡單總結(jié)幾點(diǎn)如下:
- role 是一個權(quán)限的集合,可以被賦予不同權(quán)限。
- 開啟 activate_all_roles_on_login 變量,才可以自動激活角色。
- 一個用戶可以擁有多個角色,一個角色也可以授予多個用戶。
- 角色權(quán)限變化會應(yīng)用到對應(yīng)用戶。
- 刪除角色,則擁有此角色的用戶也會喪失此角色的權(quán)限。
- 可設(shè)置強(qiáng)制性角色,使得所有用戶都擁有此角色的權(quán)限。
- 角色管理和用戶管理相似,只是角色不能用于登錄數(shù)據(jù)庫。
以上就是MySQL 角色(role)功能介紹的詳細(xì)內(nèi)容,更多關(guān)于MySQL 角色(role)功能的資料請關(guān)注本站其它相關(guān)文章!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。