天天看點

MySQL8.0功能詳解-角色【轉】

角色功能對于Oracle的DBA來說,不是什麼特殊功能,但對于MySQL而言,這是一個人心所盼的功能。

MySQL的DBA現在可以建立角色、對其賦予權限,并将它們授予使用者。使用角色可以大量減輕DBA的工作,可以輕松管理每個團隊、使用者的各種複雜的權限。

下面詳細介紹一下MySQL中如何使用角色:

建立删除角色:

建立角色使用 “CREATE ROLE”語句,假設我們為應用程式建立隻讀角色、讀寫角色和開發人員角色。

MySQL8.0功能詳解-角色【轉】

角色的名稱與MySQL的賬戶名稱非常相似,由使用者名+主機名稱構成,如果省略主機名稱則預設為'%'。

删除角色使用:

MySQL8.0功能詳解-角色【轉】

賦予/撤銷權限:

角色建立以後,需要對其賦予相應的權限。使用下列語句分别對角色賦予全部權限、隻讀權限和讀寫權限:

MySQL8.0功能詳解-角色【轉】

賦予角色權限後,将相應的角色授予使用者。例如:

建立使用者

MySQL8.0功能詳解-角色【轉】

授予角色權限

MySQL8.0功能詳解-角色【轉】

撤銷使用者的角色和撤銷角色的權限:

MySQL8.0功能詳解-角色【轉】

檢視角色的權限:

當角色授予使用者後,我們可以檢視使用者擁有的權限,執行:

MySQL8.0功能詳解-角色【轉】

是否注意到,執行show grants語句隻是看到了使用者被賦予了角色,該角色具有哪些權限該如何檢視呢?執行下面的語句可以确認相關内容:

MySQL8.0功能詳解-角色【轉】

強制性角色:

MySQL可以通過mandatory_roles 變量來配置強制性角色。使用強制性角色,伺服器會為全部的賬戶預設賦予該角色,而不需要顯示執行賦予角色。可以使用my.cnf檔案或者使用SET PERSIST進行配置,例如:

[mysqld]

mandatory_roles='role1,role2@localhost'

SET PERSIST mandatory_roles = 'role1,role2@localhost;

需要注意的是,配置在mandatory_roles中的角色不能撤銷其權限,也不能删除。

角色自動激活:

賦予使用者帳戶的角色在帳戶會話中可以處于活動狀态,也可以處于非活動狀态。如果賦予的角色在會話中處于活動狀态,則具有相應的權限,反之則沒有。要确定目前會話中哪些角色處于活動狀态,使用CURRENT_ROLE()函數。

MySQL8.0功能詳解-角色【轉】

預設情況下,向帳戶賦予角色或在mandatory_roles系統變量值中為其命名後,該角色在帳戶會話中不會變為活動狀态。要指定每次使用者連接配接到伺服器,進行身份驗證時激活角色,請使用 SET DEFAULT ROLE:

MySQL8.0功能詳解-角色【轉】

之後,用app_dev_user登陸伺服器,檢視目前角色權限:

MySQL8.0功能詳解-角色【轉】

要在使用者連接配接到伺服器時,使所有顯式賦予的角色和強制角色自動激活,請啟用activate_all_roles_on_login 系統變量。預設情況下,禁用自動角色激活。

關于MySQL中使用角色就介紹到這裡,更為詳盡的内容請通路官網手冊

https://dev.mysql.com/doc/refman/8.0/en/roles.html