用户和权限管理

StarRocks的权限管理系统支持表级别细粒度的权限控制、基于角色的权限访问控制,以及白名单机制。

背景信息

StarRocks 2.x版本和StarRocks 3.x版本在使用上存在一定的差异,更多信息请参见社区文档StarRocks 2.5StarRocks 3.2

创建用户

重要

拥有ADMIN权限,或任意层级的GRANT权限的用户才可以创建新用户。

语法

CREATE USER user_identity [auth_option] [DEFAULT ROLE 'role_name'];

涉及参数如下:

  • user_identity:用户标识。以username@'userhost'username@['domain']的形式标明。

  • [auth_option]:认证方式。可选方式包括:

    • IDENTIFIED BY 'auth_string'

    • IDENTIFIED WITH auth_plugin

    • IDENTIFIED WITH auth_plugin BY 'auth_string'

    • IDENTIFIED WITH auth_plugin AS 'auth_string'

  • DEFAULT ROLE:当前用户的默认角色。

示例

  • 创建一个无密码用户,且不指定host。

    CREATE USER 'jack';
  • 使用明文密码创建用户,允许其从172.10.**.**登录。

    CREATE USER 'jack'@'172.10.**.**' IDENTIFIED WITH mysql_native_password BY '123456';
  • 使用密文密码创建用户,允许其从172.10.**.**登录。

    CREATE USER 'jack'@'172.10.**.**' IDENTIFIED BY PASSWORD '6BB4837EB74329105EE4568DDA7DC67ED2CA****';
    说明

    您可以通过PASSWORD()方法获得密文密码。例如,SELECT PASSWORD('123456');

  • 创建一个允许从192.168子网登录的用户,同时指定其角色为example_role。

    CREATE USER 'jack'@'192.168.%' DEFAULT ROLE 'example_role';
  • 创建一个允许从域名example_domain登录的用户。

    CREATE USER 'jack'@['example_domain'] IDENTIFIED BY '12345';

修改用户密码

重要
  • 拥有ADMIN权限,或者GLOBAL层级GRANT权限的用户,可以设置任意用户的密码。

  • 普通用户可以设置自己对应的User Identity的密码,自己对应的User Identity可以通过SELECT CURRENT_USER();命令查看。

  • 拥有非GLOBAL层级GRANT权限的用户,不可以设置已存在用户的密码,仅能在创建用户时指定密码。

  • root用户的密码仅root用户可以重置。

语法

SET PASSWORD [FOR user_identity] = [PASSWORD('plain password')]|['hashed password'];

示例

  • 修改当前用户的密码

    SET PASSWORD = PASSWORD('123456');
    SET PASSWORD = '6BB4837EB74329105EE4568DDA7DC67ED2CA****';
  • 修改指定用户密码

    SET PASSWORD FOR 'jack'@'192.%' = PASSWORD('123456');
    SET PASSWORD FOR 'jack'@['domain'] = '6BB4837EB74329105EE4568DDA7DC67ED2CA****';
说明

您可以通过PASSWORD()方法获得密文密码。

删除用户

重要

拥有ADMIN权限的用户可以删除所有用户。

DROP USER 'user_identity';

授予权限

重要
  • 拥有ADMIN权限,或者GLOBAL层级GRANT权限的用户,可以授予任意用户的权限。

  • 拥有DATABASE层级GRANT权限的用户,可以授予任意用户对指定数据库的权限。

  • 拥有TABLE层级GRANT权限的用户,可以授予任意用户对指定数据库中指定表的权限。

  • ADMIN_PRIV权限只能在GLOBAL层级授予或撤销。

  • 拥有GLOBAL层级GRANT_PRIV实际等同于拥有ADMIN_PRIV,因为该层级的GRANT_PRIV有授予任意权限的权限,请谨慎授予该权限。

StarRocks 3.x版本

  • 将所有数据库及库中所有表的读取权限授予用户。

    GRANT SELECT ON *.* TO 'jack'@'%';
  • 将数据库db1及其中所有表的导入权限授予角色。

    GRANT INSERT ON db1.* TO ROLE '<role_name>';
  • 将所有资源的使用权限授予用户。

    GRANT USAGE ON RESOURCE * TO 'jack'@'%';

StarRocks 2.x版本

  • 授予指定用户数据库级或表级权限

    GRANT privilege_list ON db_name[.tbl_name] TO user_identity [ROLE role_name];
  • 授予指定用户指定资源权限

    GRANT privilege_list ON RESOURCE resource_name TO user_identity [ROLE role_name];

涉及参数如下:

  • privilege_list:需要赋予的权限列表,以逗号分隔。权限如下:

    • NODE_PRIV:节点变更权限。包括FE、BE、BROKER节点的添加、删除、下线等操作。目前该权限只能授予root用户。

    • GRANT_PRIV:权限变更权限。允许执行包括授权、撤权,添加、删除、变更用户或角色等操作。

    • SELECT_PRIV:对数据库、表的只读权限。

    • LOAD_PRIV:对数据库、表的写权限。包括LOAD、INSERT、DELETE等。

    • ALTER_PRIV:对数据库、表的更改权限。包括重命名库、表;添加、删除、变更列;添加、删除分区等操作。

    • CREATE_PRIV:创建数据库、表、视图的权限。

    • DROP_PRIV:删除数据库、表、视图的权限。

    • USAGE_PRIV:资源的使用权限。

  • db_name:数据库名。

  • tbl_name:表名。

  • user_identity:用户标识。以username@'userhost'username@['domain']的形式标明。

  • ROLE:将权限赋予指定的ROLE,如果指定的ROLE不存在,则会自动创建。

撤销权限

重要
  • 拥有ADMIN权限,或者GLOBAL层级GRANT权限的用户,可以撤销任意用户的权限。

  • 拥有DATABASE层级GRANT权限的用户,可以撤销任意用户对指定数据库的权限。

  • 拥有TABLE层级GRANT权限的用户,可以撤销任意用户对指定数据库中指定表的权限。

StarRocks 3.x版本

  • 撤销指定用户对指定表的SELECT权限

    REVOKE SELECT ON TABLE sr_member FROM USER 'jack'@'172.10.**.**';
  • 撤销指定角色对指定资源的使用权限

    REVOKE USAGE ON RESOURCE '<resource_name>' FROM ROLE '<role_name>';

StarRocks 2.x版本

  • 撤销指定用户数据库级或表级权限

    REVOKE privilege_list ON db_name[.tbl_name] FROM user_identity [ROLE role_name];
  • 撤销指定用户指定资源权限

    REVOKE privilege_list ON RESOURCE resource_name FROM user_identity [ROLE role_name];

创建角色

重要

拥有ADMIN权限的用户才可以创建角色。

您可以对创建好的角色进行授权操作,拥有该角色的用户拥有角色被赋予的权限。

CREATE ROLE <role_name>;

查看角色

SHOW ROLES;

删除角色

重要

拥有GRANT_PRIV或ADMIN_PRIV权限的用户可以删除角色。

DROP ROLE <role_name>;

查看用户属性

SHOW PROPERTY [FOR user] [LIKE key];

涉及参数如下:

  • user:用户名。

  • key:相关属性关键字。

示例如下:

  • 查看指定用户的属性。

    SHOW PROPERTY FOR 'jack';
  • 看指定用户导入cluster相关属性。

    SHOW PROPERTY FOR 'jack' LIKE '%load_cluster%';