角色功能對于Oracle的DBA來說,不是什麼特殊功能,但對于MySQL而言,這是一個人心所盼的功能。
MySQL的DBA現在可以建立角色、對其賦予權限,并将它們授予使用者。使用角色可以大量減輕DBA的工作,可以輕松管理每個團隊、使用者的各種複雜的權限。
下面詳細介紹一下MySQL中如何使用角色:
建立删除角色:
建立角色使用 “CREATE ROLE”語句,假設我們為應用程式建立隻讀角色、讀寫角色和開發人員角色。
角色的名稱與MySQL的賬戶名稱非常相似,由使用者名+主機名稱構成,如果省略主機名稱則預設為'%'。
删除角色使用:
賦予/撤銷權限:
角色建立以後,需要對其賦予相應的權限。使用下列語句分别對角色賦予全部權限、隻讀權限和讀寫權限:
賦予角色權限後,将相應的角色授予使用者。例如:
建立使用者
授予角色權限
撤銷使用者的角色和撤銷角色的權限:
檢視角色的權限:
當角色授予使用者後,我們可以檢視使用者擁有的權限,執行:
是否注意到,執行show grants語句隻是看到了使用者被賦予了角色,該角色具有哪些權限該如何檢視呢?執行下面的語句可以确認相關内容:
強制性角色:
MySQL可以通過mandatory_roles 變量來配置強制性角色。使用強制性角色,伺服器會為全部的賬戶預設賦予該角色,而不需要顯示執行賦予角色。可以使用my.cnf檔案或者使用SET PERSIST進行配置,例如:
[mysqld]
mandatory_roles='role1,role2@localhost'
SET PERSIST mandatory_roles = 'role1,role2@localhost;
需要注意的是,配置在mandatory_roles中的角色不能撤銷其權限,也不能删除。
角色自動激活:
賦予使用者帳戶的角色在帳戶會話中可以處于活動狀态,也可以處于非活動狀态。如果賦予的角色在會話中處于活動狀态,則具有相應的權限,反之則沒有。要确定目前會話中哪些角色處于活動狀态,使用CURRENT_ROLE()函數。
預設情況下,向帳戶賦予角色或在mandatory_roles系統變量值中為其命名後,該角色在帳戶會話中不會變為活動狀态。要指定每次使用者連接配接到伺服器,進行身份驗證時激活角色,請使用 SET DEFAULT ROLE:
之後,用app_dev_user登陸伺服器,檢視目前角色權限:
要在使用者連接配接到伺服器時,使所有顯式賦予的角色和強制角色自動激活,請啟用activate_all_roles_on_login 系統變量。預設情況下,禁用自動角色激活。
關于MySQL中使用角色就介紹到這裡,更為詳盡的内容請通路官網手冊
https://dev.mysql.com/doc/refman/8.0/en/roles.html