全部產品
Search
文件中心

PolarDB:角色許可權管理

更新時間:Jul 06, 2024

本文介紹角色許可權管理相關文法及樣本。

PolarDB-X相容原生MySQL 8.0基於角色的許可權控制,MySQL文檔請參見基於角色的許可權控制

建立角色

文法:

CREATE ROLE role [, role]...
參數roleuser一樣也由Name和Host這兩部分組成,其中:
  • Name不可為空;
  • Host需滿足如下規則:
    • 必須是純IP地址,可以包含底線(_)和百分比符號(%),但這兩個符號僅代表2個一般字元,並不具備萬用字元意義;
    • Host留空等於%,但也是精準匹配,不具備萬用字元意義。

樣本:

CREATE ROLE 'role_ro'@'%', 'role_write';

刪除角色

文法:

DROP ROLE role [, role] ...

樣本:

DROP ROLE 'role_ro'@'%';

授予角色

將許可權授予角色

文法:

GRANT priv_type [, priv_type] ... ON priv_level TO role [, role]... [WITH GRANT OPTION]

樣本:

GRANT ALL PRIVILEGES ON db1.* TO 'role_write';
將角色授予使用者

文法:

GRANT role [, role] ...
    TO user_or_role [, user_or_role] ...
    [WITH ADMIN OPTION]
說明:
  • 執行該命令必須滿足如下條件的其中之一:
    • 目前使用者有CREATE_USER許可權;
    • 目前使用者對Role有admin許可權;
  • 如果包含WITH ADMIN OPTION選項,則目標使用者對該Role擁有admin許可權;
  • 將角色授予使用者並不代表此使用者已擁有該角色下的許可權,您還需要通過SET DEFAULT ROLE語句和SET ROLE語句為使用者佈建需要啟用的角色。

樣本:

GRANT 'role_write' TO 'user1'@'127.0.0.1';
設定預設角色

文法:

SET DEFAULT ROLE
    {NONE | ALL | role [, role ] ...}
    TO user [, user ] ...
執行該命令必須滿足如下條件的其中之一:
  • 語句中所提到的Role已通過GRANT命令授予給目標使用者;
  • 目前使用者為目標使用者,或目前使用者有CREATE_USER許可權。

樣本:

SET DEFAULT ROLE 'role_write' TO 'user1'@'127.0.0.1';
設定當前串連角色

文法:

SET ROLE {
    DEFAULT
  | NONE
  | ALL
  | ALL EXCEPT role [, role ] ...
  | role [, role ] ...
}
說明
  • 若選擇執行SET ROLE DEFAULT ,則當前啟用的角色為SET DEFAULT ROLE命令中選擇的角色;
  • 通過該文法啟用的角色僅對使用當前串連的使用者生效。

樣本:

SET ROLE 'role_write';;

查看角色許可權

文法:

SHOW GRANTS
    [FOR user_or_role
        [USING role [, role] ...]]

樣本:

SHOW GRANTS FOR 'role_write'@'%';
+---------------------------------------------------+
| GRANTS FOR 'ROLE_WRITE'@'%'                       |
+---------------------------------------------------+
| GRANT USAGE ON *.* TO 'role_write'@'%'            |
| GRANT ALL PRIVILEGES ON db1.* TO 'role_write'@'%' |
+---------------------------------------------------+

SHOW GRANTS FOR 'user1'@'127.0.0.1' USING 'role_write';
+------------------------------------------------------+
| GRANTS FOR 'USER1'@'127.0.0.1'                       |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'127.0.0.1'            |
| GRANT ALL PRIVILEGES ON db1.* TO 'user1'@'127.0.0.1' |
| GRANT 'role_write'@'%' TO 'user1'@'127.0.0.1'        |
+------------------------------------------------------+

-- 以user1的會話執行
SELECT CURRENT_ROLE();
+------------------+
| CURRENT_ROLE()   |
+------------------+
| 'role_write'@'%' |
+------------------+

回收角色

回收角色的許可權

文法:

REVOKE priv_type [, priv_type] ... ON priv_level FROM role [, role]...

樣本:

REVOKE ALL PRIVILEGES ON db1.* FROM 'role_write';

SHOW GRANTS FOR 'role_write'@'%';
+----------------------------------------+
| GRANTS FOR 'ROLE_WRITE'@'%'            |
+----------------------------------------+
| GRANT USAGE ON *.* TO 'role_write'@'%' |
+----------------------------------------+
回收使用者的許可權

文法:

REVOKE role [, role ] ... FROM user_or_role [, user_or_role ] ...

樣本:

SHOW GRANTS FOR 'user1'@'127.0.0.1';
+-----------------------------------------------+
| GRANTS FOR 'USER1'@'127.0.0.1'                |
+-----------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'127.0.0.1'     |
| GRANT SELECT ON db1.* TO 'user1'@'127.0.0.1'  |
| GRANT 'role_write'@'%' TO 'user1'@'127.0.0.1' |
+-----------------------------------------------+

REVOKE 'role_write' FROM 'user1'@'127.0.0.1';

SHOW GRANTS FOR 'user1'@'127.0.0.1';
+----------------------------------------------+
| GRANTS FOR 'USER1'@'127.0.0.1'               |
+----------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'127.0.0.1'    |
| GRANT SELECT ON db1.* TO 'user1'@'127.0.0.1' |
+----------------------------------------------+