You need to enable JavaScript to run this app.
导航

用户和权限管理

最近更新时间2024.05.06 16:35:59

首次发布时间2024.05.06 16:35:59

本文描述如何在 StarRocks(3x 版本)中管理用户、角色和权限。
StarRocks 同时采用了基于角色的访问控制 (RBAC) 和基于身份的访问控制 (IBAC) 以管理集群内的权限,使集群管理员可以轻松地在不同粒度级别上限制集群内的权限。
在 StarRocks 集群中,您可以将权限授予用户或角色。角色是一组权限,可根据需要授予集群内的用户或角色。一个用户或角色可以被授予一个或多个角色,这些角色决定了他们对不同对象的权限。

1 查看用户和角色信息

拥有系统预置角色 user_admin 的用户可以查看 StarRocks 集群中用户和角色的信息。

1.1 查看权限信息

您可以使用 SHOW GRANTS 查看授予用户或角色的权限。

  • 查看当前用户的权限。
SHOW GRANTS;

说明

  • 任何用户都可以查看自身的权限,无需任何权限。
  • 查看特定用户的权限。

  • 以下示例查看用户 jack 的权限。

SHOW GRANTS FOR jack@'{客户端IP}';
  • 查看特定角色的权限。

  • 以下示例查看角色 example_role 的权限。

SHOW GRANTS FOR ROLE example_role;

1.2 查看用户属性

您可以使用 SHOW PROPERTY 查看用户的属性。
以下示例查看用户 jack 的属性:

SHOW PROPERTY FOR jack@'{客户端IP}';

1.3 查看角色

您可以使用 SHOW ROLES 查看 StarRocks 集群中的所有角色。

SHOW ROLES;

1.4 查看用户

您可以使用 SHOW USERS 查看 StarRocks 集群中的所有用户。

SHOW USERS;

2 管理用户

拥有系统预置角色 user_admin 的用户可以在 StarRocks 中创建、修改和删除用户。

2.1 创建用户

您可以通过指定用户身份(user identity)、认证方式和默认角色来创建用户。
StarRocks 支持使用用户密码登录或 LDAP 认证作为用户认证方式。有关 StarRocks 认证方式的更多信息,请参阅 用户认证。有关创建用户的更多操作说明,请参阅 CREATE USER
以下示例创建用户 jack,仅允许其从 IP 地址 {客户端IP} 进行连接,为其设置密码为 xxxxx,并将角色 example_role 分配给它作为其默认角色:

CREATE USER jack@'{客户端IP}' IDENTIFIED BY '{password}' DEFAULT ROLE 'example_role';

说明

  • StarRocks 会在存储用户密码之前对其进行加密。您可以使用 password() 函数获取加密后的密码。
  • 如果在创建用户期间未指定默认角色,StarRocks 会指定系统预置角色 PUBLIC 作为用户默认角色。

2.2 修改用户

您可以修改用户的密码、默认角色或属性。
当用户连接到 StarRocks 时,其默认角色会自动激活。有关如何在连接后为用户启用所有(默认和授予的)角色的说明,请参阅启用所有角色

2.2.1 修改用户默认角色

您可以使用 SET DEFAULT ROLEALTER USER 设置用户的默认角色。
以下两个示例都将 jack 的默认角色设置为 db1_admin。设置前需要确保 db1_admin 角色已经赋予给了 jack

  • 通过 SET DEFAULT ROLE 设置默认角色:
SET DEFAULT ROLE 'db1_admin' TO jack@'{客户端IP}';
  • 通过 ALTER USER 设置默认角色:
ALTER USER jack@'{客户端IP}' DEFAULT ROLE 'db1_admin';

2.2.2 修改用户属性

您可以使用 SET PROPERTY 设置用户的属性。
相同用户名的用户标识共享一个属性。在以下示例中,只需将属性配置给 jack,那么该属性配置会对所有含用户名 jack 的用户标识生效。
将用户 jack 的最大连接数设置为 1000

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

2.2.3 重置用户密码

您可以使用 SET PASSWORDALTER USER 为用户重置密码。

说明

  • 任何用户都可以重置自己的密码,无需任何权限。
  • root 用户的密码仅 root 用户自身可以重置。如果您丢失了密码并且无法连接到 StarRocks,请参阅 重置丢失的 root 密码

以下两个示例都将 jack 的密码重置为 54321

  • 通过 SET PASSWORD 重置密码:
SET PASSWORD FOR jack@'{客户端IP}' = PASSWORD('54321');
  • 通过 ALTER USER 重置密码:
ALTER USER jack@'{客户端IP}' IDENTIFIED BY '54321';

2.2.4 重置丢失的 root 密码

如果您丢失了 root 用户的密码且无法连接到 StarRocks,您可以按照以下步骤重置密码:

  1. 所有 FE 节点的配置文件 fe/conf/fe.conf 中添加以下配置项以关闭用户认证:
enable_auth_check = false
  • 重启所有 FE 节点使配置生效。
./fe/bin/stop_fe.sh
./fe/bin/start_fe.sh
  • 使用 root 用户从 MySQL 客户端连接到 StarRocks。禁用用户认证时,无需密码即可登录。
mysql -h <fe_ip_or_fqdn -P<fe_query_port -uroot
  • 重置 root 用户密码。
SET PASSWORD for root = PASSWORD('xxxxxx');
  • 所有 FE 节点的配置文件 fe/conf/fe.conf 中将配置项 enable_auth_check 设置为 true 以重新开启用户认证。
enable_auth_check = true
  • 重启所有 FE 节点使配置生效。
./fe/bin/stop_fe.sh
./fe/bin/start_fe.sh
  • 使用 root 用户和新密码从 MySQL 客户端连接 StarRocks 以验证密码是否重置成功。
mysql -h <fe_ip_or_fqdn -P<fe_query_port -uroot -p<xxxxxx

2.3 删除用户

您可以使用 DROP USER 删除用户。
以下示例删除用户 jack

DROP USER jack@'{客户端IP}';

3 管理角色

拥有系统预置角色 user_admin 的用户可以在 StarRocks 中创建、授予、撤销和删除角色。

3.1 创建角色

您可以使用 CREATE ROLE 创建角色。默认每个用户最多可以拥有 64 个角色,您也可以通过 FE 动态参数 privilege_max_total_roles_per_user 来根据需求调整这一限制。角色的嵌套关系最多为 16 层,您也可以通过 FE 动态参数 privilege_max_role_depth 来进行调整。
以下示例创建角色 example_role

CREATE ROLE example_role;

3.2 授予角色

您可以使用 GRANT 将角色授予用户或其他角色。

  • 将角色授予用户。

  • 以下示例将角色 example_role 授予用户 jack

GRANT example_role TO USER jack@'{客户端IP}';
  • 将角色授予其他角色。

  • 以下示例将角色 example_role 授予角色 test_role

GRANT example_role TO ROLE test_role;

3.3 撤销角色

您可以使用 REVOKE 将角色从用户或其他角色撤销。

说明

  • 系统预置的默认角色 PUBLIC 无法撤销。

  • 从用户撤销角色。

  • 以下示例从用户 jack 撤销角色 example_role

REVOKE example_role FROM USER jack@'{客户端IP}';
  • 从角色撤销其他角色。

  • 以下示例从角色 test_role 撤销角色 example_role

REVOKE example_role FROM ROLE test_role;

3.4 删除角色

您可以使用 DROP ROLE 删除角色。
以下示例删除角色 example_role

DROP ROLE example_role;

注意

系统预置角色无法删除。

3.5 启用所有角色

用户的默认角色是每次用户连接到 StarRocks 集群时自动激活的角色。授予给角色的权限仅在授予后生效。
如果您希望集群里所有的用户在登录时都默认激活所有角色(默认和授予的角色),可以执行如下操作。该操作需要 system 层的 OPERATE 权限。
执行以下语句为集群中用户启用所有角色:

SET GLOBAL activate_all_roles_on_login = TRUE;

您还可以通过 SET ROLE 来手动激活拥有的角色。例如用户 jack@'{客户端IP}' 拥有 db_adminuser_admin 角色,但此角色不是他的默认角色,因此在登录时不会被默认激活。当 jack@'{客户端IP}' 需要激活 db_adminuser_admin 时,可以手动执行 SET ROLE db_admin, user_admin;。 注意 SET ROLE 命令是覆盖的,如果您希望激活拥有的所有角色,可以执行 SET ROLE ALL。

4 管理权限

拥有系统预置角色 user_admin 的用户可以在 StarRocks 中授予和撤销权限。

4.1 授予权限

您可以使用 GRANT 向用户或角色授予权限。

  • 向用户授予权限。

  • 以下示例将表 sr_member 的 SELECT 权限授予用户 jack,并允许 jack 将此权限授予其他用户或角色(通过在 SQL 中指定 WITH GRANT OPTION):

GRANT SELECT ON TABLE sr_member TO USER jack@'{客户端IP}' WITH GRANT OPTION;
  • 向角色授予权限。

  • 以下示例将表 sr_member 的 SELECT 权限授予角色 example_role

GRANT SELECT ON TABLE sr_member TO ROLE example_role;

4.2 撤销权限

您可以使用 REVOKE 撤销用户或角色的权限。

  • 撤销用户的权限。

  • 以下示例撤销用户 jack 对表 sr_member 的 SELECT 权限,并禁止 jack 将此权限授予其他用户或角色:

REVOKE SELECT ON TABLE sr_member FROM USER jack@'{客户端IP}';
  • 撤销角色的权限。

  • 以下示例撤销角色 example_role 对表 sr_member 的 SELECT 权限:

REVOKE SELECT ON TABLE sr_member FROM ROLE example_role;