您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“MySQL角色功能有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
1. role 簡(jiǎn)介
role 角色功能對(duì)于 Oracle 數(shù)據(jù)庫(kù)來說不算是什么特殊,在 Oracle 中經(jīng)常被用到。MySQL 8.0 版本終于新增了 role 功能,為數(shù)據(jù)庫(kù)用戶權(quán)限管理提供了一種新思路。
role 可以看做一個(gè)權(quán)限的集合,這個(gè)集合有一個(gè)統(tǒng)一的名字 role 名??梢越o多個(gè)數(shù)據(jù)庫(kù)用戶授予同個(gè) role 的權(quán)限,權(quán)限變更可直接通過修改 role 來實(shí)現(xiàn),不需要每個(gè)用戶一個(gè)一個(gè)的去變更,方便運(yùn)維和管理。role 可以創(chuàng)建、刪除、修改并作用到它管理的用戶上。
下面我們具體來體驗(yàn)下 role 角色功能:
# 創(chuàng)建role mysql> create role 'dev_role'; Query OK, 0 rows affected (0.15 sec) # 給role授予權(quán)限 mysql> grant select on db1.* to 'dev_role'@'%'; Query OK, 0 rows affected (0.12 sec) # 查看role的權(quán)限 mysql> show grants for 'dev_role'@'%'; +-------------------------------------------+ | Grants for dev_role@% | +-------------------------------------------+ | GRANT USAGE ON *.* TO `dev_role`@`%` | | GRANT SELECT ON `db1`.* TO `dev_role`@`%` | +-------------------------------------------+ # 創(chuàng)建用戶 并賦予角色權(quán)限 mysql> create user 'dev1'@'%' identified by '123456'; Query OK, 0 rows affected (0.68 sec) mysql> grant 'dev_role' to 'dev1'@'%'; Query OK, 0 rows affected (0.38 sec) # 查看用戶權(quán)限 mysql> show grants for 'dev1'@'%'; +------------------------------------+ | Grants for dev1@% | +------------------------------------+ | GRANT USAGE ON *.* TO `dev1`@`%` | | GRANT `dev_role`@`%` TO `dev1`@`%` | +------------------------------------+ 2 rows in set (0.63 sec) # 使用dev1用戶登錄 root@localhost ~]# mysql -udev1 -p123456 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | +--------------------+ 1 row in set (0.34 sec) mysql> select CURRENT_ROLE(); +----------------+ | CURRENT_ROLE() | +----------------+ | NONE | +----------------+ 1 row in set (0.59 sec)
什么情況?貌似和我們想象不同,賦予用戶某個(gè)角色權(quán)限后,該用戶并沒有獲得相應(yīng)權(quán)限。
出現(xiàn)上述情況的原因是,在用戶會(huì)話中,授予該用戶的角色處于非活動(dòng)狀態(tài)。只有授予的角色在會(huì)話中處于活動(dòng)狀態(tài)時(shí),該用戶才擁有此角色的權(quán)限,要確定當(dāng)前會(huì)話中哪些角色處于活動(dòng)狀態(tài),可以使用 CURRENT_ROLE() 函數(shù)。
# 使用 set default role 命令激活角色 mysql> SET DEFAULT ROLE ALL TO dev1; Query OK, 0 rows affected (0.77 sec) # 重新登錄 發(fā)現(xiàn)權(quán)限正常 root@localhost ~]# mysql -udev1 -p123456 mysql> select CURRENT_ROLE(); +----------------+ | CURRENT_ROLE() | +----------------+ | `dev_role`@`%` | +----------------+ 1 row in set (0.57 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | db1 | | information_schema | +--------------------+ 2 rows in set (1.05 sec)
除了使用 set default role 命令激活角色外,還可以修改系統(tǒng)變量 activate_all_roles_on_login ,該變量決定是否自動(dòng)激活 role ,默認(rèn)為 OFF 即不自動(dòng)激活,建議將該變量改為 ON ,這樣以后賦予角色給新用戶后就不需要再手動(dòng)激活了。
# 查看 activate_all_roles_on_login 變量 mysql> show variables like 'activate_all_roles_on_login'; +-----------------------------+-------+ | Variable_name | Value | +-----------------------------+-------+ | activate_all_roles_on_login | OFF | +-----------------------------+-------+ 1 row in set (1.53 sec) # 啟用該變量 先動(dòng)態(tài)啟用 之后可以將此參數(shù)加入my.cnf配置文件中 mysql> set global activate_all_roles_on_login = on; Query OK, 0 rows affected (0.50 sec) # 之后角色就會(huì)自動(dòng)激活 mysql> create user 'dev2'@'%' identified by '123456'; Query OK, 0 rows affected (0.68 sec) mysql> grant 'dev_role' to 'dev2'@'%'; Query OK, 0 rows affected (0.38 sec) root@localhost ~]# mysql -udev2 -p123456 mysql> select CURRENT_ROLE(); +----------------+ | CURRENT_ROLE() | +----------------+ | `dev_role`@`%` | +----------------+ 1 row in set (0.57 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | db1 | | information_schema | +--------------------+ 2 rows in set (1.05 sec)
2. role 相關(guān)操作
上面我們介紹了創(chuàng)建角色及給用戶授予角色權(quán)限,關(guān)于 role 相關(guān)操作還有很多,我們接著來看下。
# 變更角色權(quán)限 mysql> grant select on db2.* to 'dev_role'@'%'; Query OK, 0 rows affected (0.33 sec) # 擁有該角色的用戶 重新登錄后權(quán)限也會(huì)對(duì)應(yīng)變化 root@localhost ~]# mysql -udev1 -p123456 mysql> show databases; +--------------------+ | Database | +--------------------+ | db1 | | db2 | | information_schema | +--------------------+ 3 rows in set (2.01 sec) # 回收角色權(quán)限 mysql> revoke SELECT ON db2.* from 'dev_role'@'%'; Query OK, 0 rows affected (0.31 sec) # 撤銷用戶的角色 mysql> revoke 'dev_role'@'%' from 'dev1'@'%'; Query OK, 0 rows affected (0.72 sec) mysql> show grants for 'dev1'@'%'; +----------------------------------+ | Grants for dev1@% | +----------------------------------+ | GRANT USAGE ON *.* TO `dev1`@`%` | +----------------------------------+ 1 row in set (1.06 sec) # 刪除角色 (刪除角色后 對(duì)應(yīng)的用戶也會(huì)失去該角色的權(quán)限) mysql> drop role dev_role; Query OK, 0 rows affected (0.89 sec)
我們還可以通過 mandatory_roles 變量來配置強(qiáng)制性角色。使用強(qiáng)制性角色,服務(wù)器會(huì)為全部的用戶戶默認(rèn)賦予該角色,而不需要顯示執(zhí)行授予角色??梢允褂?my.cnf 文件或者使用 SET PERSIST 進(jìn)行配置,例如:
# my.cnf 配置 [mysqld] mandatory_roles='dev_role' # set 更改變量 SET PERSIST mandatory_roles = 'dev_role';
需要注意的是,配置在 mandatory_roles 中的角色不能撤銷其權(quán)限,也不能刪除。
總結(jié):
關(guān)于 role 角色相關(guān)知識(shí),簡(jiǎn)單總結(jié)幾點(diǎn)如下:
role 是一個(gè)權(quán)限的集合,可以被賦予不同權(quán)限。
開啟 activate_all_roles_on_login 變量,才可以自動(dòng)激活角色。
一個(gè)用戶可以擁有多個(gè)角色,一個(gè)角色也可以授予多個(gè)用戶。
角色權(quán)限變化會(huì)應(yīng)用到對(duì)應(yīng)用戶。
刪除角色,則擁有此角色的用戶也會(huì)喪失此角色的權(quán)限。
可設(shè)置強(qiáng)制性角色,使得所有用戶都擁有此角色的權(quán)限。
角色管理和用戶管理相似,只是角色不能用于登錄數(shù)據(jù)庫(kù)。
“MySQL角色功能有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。