第5.2章:StarRocks用户、角色与权限

StarRocks的权限管理参照了MySQL的权限管理机制,支持表级别细粒度的权限控制、基于角色的权限访问控制,咱们这里整体梳理一下。

1、创建角色

CREATE ROLE role_name;

该语句创建一个无权限的角色,后续可以通过GRANT命令赋予该角色权限。

2、创建用户

CREATE USER user_identity [IDENTIFIED BY 'password'] [DEFAULT ROLE 'role_name'];

在StarRocks中,一个user_identity唯一标识一个用户。

user_identity:'user_name'@'host',拆分来说:

username:你将创建的用户名。

host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%代替username。

password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码即可登陆服务。

role:如果指定了角色(ROLE),则会自动将该角色所拥有的权限赋予新创建的这个用户。如果不指定,则该用户默认没有任何权限。指定的 ROLE 必须已经存在。

示例:

  • 创建一个无密码用户(不指定host,则等价于jack@'%')
CREATE USER 'jack';
  • 创建一个有密码用户,允许从'172.10.1.10'登陆
CREATE USER jack@'172.10.1.10' IDENTIFIED BY '123456';

为了避免传递明文,上述示例也可以使用下面的方式来创建:

先通过PASSWORD()计算出加密后的密码,例如:

SELECT PASSWORD('123456');

得到结果为:*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9

创建用户:

CREATE USER jack@'172.10.1.10' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';

在登录时,我们还需使用未加密前的密码登录。

  • 创建一个允许从'192.168.*.*'子网登陆的用户,同时指定其角色为example_role
CREATE USER 'jack'@'192.168.%' DEFAULT ROLE 'example_role';
  • 创建一个用户,并指定一个角色
CREATE USER 'jack'@'%' IDENTIFIED BY '123456' DEFAULT ROLE 'my_role';

3、修改用户名[不支持]

4、删除角色

DROP ROLE role_name;

删除一个角色不会影响之前属于该角色的用户的权限,仅相当于将该角色与用户解耦,而用户已经从该角色获取到的权限维持不变。

5、删除用户

DROP USER 'user_identity';

依据user_identity删除用户帐号,例如删除用户jack@'192.%':

DROP USER 'jack'@'192.%';

6、查看角色

1)查看已创建的所有角色

展示所有已创建的角色信息,包括角色名称,包含的用户以及权限:

SHOW ROLES;

2)查看当前用户角色[不支持]

7、查看用户

1)查看所有用户

SHOW ALL GRANTS;

SHOW PROC '/auth';

2)查看当前用户

SELECT CURRENT_USER();  --显示用户

SELECT USER();  --显示用户及访问客户端的IP

8、授予用户权限

GRANT privilege_list ON db_name[.tbl_name] TO user_identity;

GRANT privilege_list ON RESOURCE resource_name TO user_identity;

1)privilege_list

是需要赋予的权限列表,以逗号分隔。当前StarRocks支持的权限基本分为三类:

节点权限:NODE_PRIV

库表权限:SELECT_PRIV,LOAD_PRIV,ALTER_PRIV,CREATE_PRIV,DROP_PRIV,ALL(前面所有)

资源权限:USAGE_PRIV

具体权限介绍:

NODE_PRIV:集群节点操作权限,包括节点上下线等操作,只有root用户有该权限,不可赋予其他用户。

ADMIN_PRIV:除NODE_PRIV以外的所有权限。

GRANT_PRIV:操作权限的权限。包括创建删除用户、角色,授权和撤权,设置密码等。

SELECT_PRIV:对指定的库或表的读取权限(Select操作)。

LOAD_PRIV:对指定的库或表的导入权限(Insert或Delete操作)。

ALTER_PRIV:对指定的库或表的schema变更权限。(Alter操作)

CREATE_PRIV:对指定的库或表的创建权限(Create Table或Create View操作)。

DROP_PRIV:对指定的库或表的删除权限。

USAGE_PRIV:对指定资源的使用权限[参见Spark Load章节]。

2)db_name[.tbl_name]

授予权限的数据库及表,支持以下三种形式:

*.* 权限可以应用于所有库及其中所有表

db.*权限可以应用于指定库下的所有表

db.tbl权限可以应用于指定库下的指定表

3)user_identity

语法同CREATE USER。且必须为使用CREATE USER创建过的user_identity。其中的host可以是域名,如果是域名,权限的生效时间可能会有约1分钟的延迟。

示例:

  • 授予所有库和表的读取权限给用户
GRANT SELECT_PRIV ON *.* TO 'jack'@'%';
  • 授予指定库表的指定权限给用户
GRANT SELECT_PRIV,ALTER_PRIV,LOAD_PRIV ON db1.tbl1 TO 'jack'@'192.8.%';
  • 授予所有资源的使用权限给用户
GRANT USAGE_PRIV ON RESOURCE * TO 'jack'@'%';
  • 授予指定资源的使用权限给用户
GRANT USAGE_PRIV ON RESOURCE 'spark_resource' TO 'jack'@'%';

4)权限查看

查看当前用户权限:

SHOW GRANTS;

查看所有用户权限:

SHOW ALL GRANTS;

查看指定用户权限:

SHOW GRANTS FOR user_identity;

9、授予角色权限

类似上文授予用户权限,将权限赋予指定的ROLE,如果指定的ROLE不存在,则会自动创建。

GRANT privilege_list ON db_name[.tbl_name] TO ROLE 'role_name';

GRANT privilege_list ON RESOURCE resource_name TO ROLE 'role_name';

例如:

授予指定库的所有表的导入权限给角色

GRANT LOAD_PRIV ON db1.* TO ROLE 'my_role';

授予指定资源的使用权限给角色

GRANT USAGE_PRIV ON RESOURCE 'spark_resource' TO ROLE 'my_role';

10、撤销用户权限

REVOKE privilege_list ON db_name[.tbl_name] FROM user_identity;

REVOKE privilege_list ON RESOURCE resource_name FROM user_identity;

user_identity:语法同CREATE USER,且必须为使用CREATE USER创建过的user_identity。user_identity中的host可以是域名,如果是域名,权限的撤销时间可能会有约1分钟的延迟。

示例:

撤销用户jack关于数据库db1的权限

REVOKE SELECT_PRIV ON db1.* FROM 'jack'@'192.%';

撤销用户jack使用资源spark_resource的权限

REVOKE SELECT_PRIV ON db1.* FROM 'jack'@'192.%';

11、撤销角色权限

REVOKE privilege_list ON db_name[.tbl_name] FROM ROLE 'role_name';

REVOKE privilege_list ON RESOURCE resource_name FROM ROLE 'role_name';

按角色撤销权限时,role_name需指向已存在的角色。

12、给用户添加角色[不支持]

当前只能在新建用户时指定对应角色。

13、修改用户登录密码

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

SET PASSWORD命令可以修改一个用户的登录密码。如果[FOR user_identity]字段不存在,那么修改当前用户的密码。注意这里的user_identity必须完全匹配在使用CREATE USER创建用户时指定的user_identity,否则会报错用户不存在。如果不指定user_identity,则当前用户为'username'@'ip',这个当前用户,可能无法匹配任何user_identity。

修改其他用户的密码,需要具有管理员权限。

修改密码时,也可以使用PASSWORD()函数将明文密码转换为加密的密码。如果不使用PASSWORD()函数,则需要直接指定加密后的密码。

SET PASSWORD = PASSWORD('123456');

或:

SELECT PASSWORD('123456');

得到结果为:*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9

设置密码:

SET PASSWORD = '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';

14、设置用户属性

SET PROPERTY [FOR 'user'] 'key' = 'value' [, 'key' = 'value']

这里设置的用户属性,是针对user的,而不是user_identity。目前该参数主要用于修改用户的最大连接数,例如:

修改用户jack最大连接数为1000:

SET PROPERTY FOR 'jack' 'max_user_connections' = '1000';

15、查看用户属性;

SHOW PROPERTY FOR 'user';

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值