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

创建用户

重要 拥有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()方法获得密文密码。
  • 创建一个允许从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有授予任意权限的权限,请谨慎授予该权限。
  • 授予指定用户数据库级或表级权限
    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权限的用户,可以撤销任意用户对指定数据库中指定表的权限。
  • 撤销指定用户数据库级或表级权限
    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%';