角色(Role)是分配给账号(User)的权限的集合,定义了允许账号在应用程序中查看和执行的操作。PolarDB-X 2.0中的Role操作与原生MySQL的Role操作兼容,本文将介绍Role相关的语法。

管理Role

  • 创建Role
    语法如下:
    CREATE ROLE role [, role]...
    示例如下:
    CREATE ROLE role1@'%', role2;
    说明 与CREATE USER语法一样,[, role]也由Name和Host这两部分组成,其中:
    • Name不能为空。
    • Host需满足如下规则:
      • 必须是纯IP地址,可以包含下划线(_)和百分号(%),但这两个符号仅代表2个普通字符,并不具备通配符意义。
      • Host留空等于%,但也是精准匹配,不具备通配符意义。
  • 删除Role
    语法如下:
    DROP ROLE role [, role] ...
    示例如下:
    DROP ROLE role1@'%', role2;
  • 授予Role权限
    • 授予用户权限

      语法如下:

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

      示例如下:

      grant ALL PRIVILEGES ON *.* to role1@'%', role2;
      说明 该语法与授予用户权限语法相似,详情请参见授权权限(GRANT)语句
    • 将Role授予用户

      语法如下:

      GRANT role [, role] ...
          TO user_or_role [, user_or_role] ...
          [WITH ADMIN OPTION]
      说明
      • 执行该命令满足如下条件的其中之一:
        • 当前用户有CREATE_USER权限。
        • 当前用户对Role有admin权限。
      • 如果包含WITH ADMIN OPTION选项,则目标用户对该Role拥有admin权限。
      • 将Role授予用户并不代表此用户已拥有该Role下的权限,您还需要通过SET DEFAULT ROLE语句和SET ROLE语句为用户设置需要激活的Role。

      示例如下:

      GRANT role1@'%', role2 to user1@'%';
  • 回收Role权限
    • 回收用户权限

      语法如下:

      REVOKE priv_type [, priv_type] ... ON priv_level FROM role [, role]...
      说明 该语法与回收用户权限类似,详情请参见回收权限(REVOKE)语句
      示例如下:
      REVOKE ALL PRIVILEGES ON *.* FROM role1@'%', role2;
    • 回收用户的Role

      语法如下:

      REVOKE role [, role ] ...
          FROM user_or_role [, user_or_role ] ...
      说明 执行该命令满足如下条件的其中之一:
      • 当前用户即为目标用户(即需要被Revoke的用户)。
      • 当前用户有CREATE_USER权限。
      • 当前用户对Role有admin权限。

      示例如下:

      REVOKE role1@'%', role2 FROM user1@'%';
  • 设置默认Role

    语法如下:

    SET DEFAULT ROLE
        {NONE | ALL | role [, role ] ...}
        TO user [, user ] ...
    说明 执行该命令需同时满足如下条件:
    • 语句中所提到的Role已通过GRANT命令授予给目标用户。
    • 当前用户即为目标用户,或当前用户有CREATE_USER权限。
    示例如下:
     SET DEFAULT ROLE role1@'%' TO user1@'%';
  • 设置当前连接(Session)中需要激活的Role

    语法如下:

    SET ROLE {
        DEFAULT
      | NONE
      | ALL
      | ALL EXCEPT role [, role ] ...
      | role [, role ] ...
    }
    说明
    • 若选择执行SET ROLE DEFAULT ,则当前激活的Role为SET DEFAULT ROLE命令中选择的Role。
    • 通过该语法激活的Role仅对使用当前连接的用户生效。

    示例如下:

    SET ROLE ALL;

查看权限

  • 查看指定用户的权限

    语法如下:

    SHOW GRANTS
        [FOR user_or_role
            [USING role [, role] ...]]
    user_or_role: {
        user 
      | role
      | current_user
      | current_user()        
    }
    说明 当包含USING role [,role]... 时,会返回如下结果:
    • 若该Role已授予给用户,返回结果会显示该Role下的所有权限。
    • 若该Role未授予给用户,则会报错。
    示例如下:
    mysql> show grants for user1@'%' using role1@'%';
    返回结果如下:
    +-----------------------------------------------+
    | GRANTS FOR 'USER1'@'%'                        |
    +-----------------------------------------------+
    | GRANT USAGE ON *.* TO 'user1'@'%'             |
    | GRANT 'role1'@'%', 'role2'@'%' TO 'user1'@'%' |
    +-----------------------------------------------+
  • 查看当前Session中被激活的Role
    语法如下:
    SELECT CURRENT_ROLE();
    示例如下:
    mysql> SELECT CURRENT_ROLE();
    返回结果如下:
    +----------------+
    | current_role() |
    +----------------+
    | NONE           |
    +----------------+