角色功能對於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
轉自
MySQL8功能詳解——角色 https://mp.weixin.qq.com/s/2kCC7Ab95sJhnIApnTG9vw