角色一直存在各個數據庫中,比如 SQL Server、Oracle 等,MySQL 自從版本 8.0 release,引入了角色這個概念。
角色的概念
角色就是一組針對各種數據庫權限的集合。比如,把一個角色分配給一個用戶,那這個用戶就擁有了這個角色包含的所有權限。一個角色可以分配給多個用戶,另外一個用戶也可以擁有多個角色,兩者是多對多的關系。不過 MySQL 角色目前還沒有提供類似于其他數據庫的系統預分配的角色。比如某些數據庫的 db_owner、 db_datareader 、 db_datawriter 等等。那接下來我分幾個方面,來示例說明角色的使用以及相關注意事項。
示例 1:一個完整角色的授予步驟
用管理員創建三個角色:db_owner, db_datareader, db_datawriter
創建三個普通用戶,分別為 ytt1、ytt2、ytt3。
分別授予這三個用戶對應的角色。
以上是角色授予的一套完整步驟。那上面有點非常規的地方是激活角色這個步驟。MySQL 角色在創建之初默認是沒有激活的,也就是說創建角色,并且給一個用戶特定的角色,這個用戶其實并不能直接使用這個角色,除非激活了才可以。
示例 2:一個用戶可以擁有多個角色
示例 3:用戶在當前 session 里角色互換
其實意思是說,用戶連接到 MySQL 服務器后,可以切換當前的角色列表,比如由 db_owner 切換到 db_datareader。
示例 4:關于角色的兩個參數
activate_all_roles_on_login:是否在連接 MySQL 服務時自動激活角色mandatory_roles:強制所有用戶默認角色
示例 5 :create role 和 create user 都有創建角色權限,兩者有啥區別?
以下分別創建兩個用戶 ytt8、ytt9,一個給 create role,一個給 create user 權限。
那這里其實看到 create user 包含了 create role,create user 即可以創建用戶,也可以創建角色。
示例 6:MySQL 用戶也可以當角色來用
示例 7:角色的撤銷
角色撤銷和之前權限撤銷類似。要么 revoke,要么刪除角色,那這個角色會從所有擁有它的用戶上移除。
至此,我分了 7 個目錄說明了角色在各個方面的使用以及注意事項,希望對大家有幫助。