StarRocks的权限管理系统支持表级别细粒度的权限控制、基于角色的权限访问控制,以及白名单机制。
背景信息
StarRocks 2.x版本和StarRocks 3.x版本在使用上存在一定的差异,更多信息请参见社区文档StarRocks 2.5和StarRocks 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%';