跳到主要内容
版本: 最新版本-3.5

管理用户权限

本文档介绍如何在 StarRocks 中管理用户、角色和权限。

StarRocks 采用基于角色的访问控制 (RBAC) 和基于身份的访问控制 (IBAC) 来管理 StarRocks 集群中的权限,使集群管理员能够轻松地在不同的粒度级别上限制集群中的权限。

在 StarRocks 集群中,可以将权限授予用户或角色。角色是一组权限的集合,可以根据需要在集群中分配给用户或其他角色。一个用户可以被授予一个或多个角色,这些角色决定了他们在不同对象上的权限。

查看权限和角色信息

具有系统定义角色 user_admin 的用户可以查看 StarRocks 集群中的所有用户和角色信息。

查看权限信息

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

  • 查看当前用户的权限。

    SHOW GRANTS;

    注意

    任何用户都可以查看自己的权限,而无需任何权限。

  • 查看特定用户的权限。

    以下示例显示了用户 jack 的权限

    SHOW GRANTS FOR jack@'172.10.1.10';
  • 查看特定角色的权限。

    以下示例显示了角色 example_role 的权限

    SHOW GRANTS FOR ROLE example_role;

查看角色

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

SHOW ROLES;

管理角色

具有系统定义角色 user_admin 的用户可以在 StarRocks 中创建、授予、撤销或删除角色。

创建角色

您可以使用 CREATE ROLE 创建角色。默认情况下,一个用户最多可以拥有 64 个角色。您可以使用 FE 动态参数 privilege_max_total_roles_per_user 调整此设置。一个角色最多可以有 16 个继承级别。您可以使用 FE 动态参数 privilege_max_role_depth 调整此设置。

以下示例创建角色 example_role

CREATE ROLE example_role;

授予角色

您可以使用 GRANT 将角色授予用户或另一个角色。

  • 将角色授予用户。

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

    GRANT example_role TO USER jack@'172.10.1.10';
  • 将角色授予另一个角色。

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

    GRANT example_role TO ROLE test_role;

更改用户的默认角色

当用户连接到 StarRocks 时,用户的默认角色会自动激活。有关如何在连接后为用户启用所有(默认和已授予)角色的说明,请参阅启用所有角色

您可以使用 SET DEFAULT ROLEALTER USER 设置用户的默认角色。

以下两个示例都将 jack 的默认角色设置为 db1_admin。请注意,必须已将 db1_admin 分配给 jack

  • 使用 SET DEFAULT ROLE 设置默认角色

    SET DEFAULT ROLE 'db1_admin' TO jack@'172.10.1.10';
  • 使用 ALTER USER 设置默认角色

    ALTER USER jack@'172.10.1.10' DEFAULT ROLE 'db1_admin';

撤销角色

您可以使用 REVOKE 从用户或另一个角色撤销角色。

注意

您不能从用户撤销系统定义的默认角色 PUBLIC

  • 从用户撤销角色。

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

    REVOKE example_role FROM USER jack@'172.10.1.10';
  • 从另一个角色撤销角色。

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

    REVOKE example_role FROM ROLE test_role;

删除角色

您可以使用 DROP ROLE 删除角色。

以下示例删除角色 example_role

DROP ROLE example_role;

注意

无法删除系统定义的角色。

启用所有角色

用户的默认角色是每次用户连接到 StarRocks 集群时自动激活的角色。

如果您想在所有 StarRocks 用户连接到 StarRocks 集群时为他们启用所有角色(默认角色和已授予的角色),您可以执行以下操作。

此操作需要系统权限 OPERATE。

SET GLOBAL activate_all_roles_on_login = TRUE;

您还可以使用 SET ROLE 来激活分配给您的角色。例如,用户 jack@'172.10.1.10' 具有角色 db_adminuser_admin,但它们不是用户的默认角色,并且在用户连接到 StarRocks 时不会自动激活。如果 jack@'172.10.1.10' 需要激活 db_adminuser_admin,他可以运行 SET ROLE db_admin, user_admin;。请注意,SET ROLE 会覆盖原始角色。如果您想启用您的所有角色,请运行 SET ROLE ALL。

管理权限

具有系统定义角色 user_admin 的用户可以在 StarRocks 中授予或撤销权限。

授予权限

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

  • 将权限授予用户。

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

    GRANT SELECT ON TABLE sr_member TO USER jack@'172.10.1.10' WITH GRANT OPTION;
  • 将权限授予角色。

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

    GRANT SELECT ON TABLE sr_member TO ROLE example_role;

撤销权限

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

  • 从用户撤销权限。

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

    REVOKE SELECT ON TABLE sr_member FROM USER jack@'172.10.1.10';
  • 从角色撤销权限。

    以下示例从角色 example_role 撤销表 sr_member 上的 SELECT 权限

    REVOKE SELECT ON TABLE sr_member FROM ROLE example_role;

最佳实践

多服务访问控制

通常,公司拥有的 StarRocks 集群由唯一的服务提供商管理,并维护多个业务线 (LOB),每个业务线使用一个或多个数据库。

如下图所示,StarRocks 集群的用户包括来自服务提供商和两个 LOB(A 和 B)的成员。每个 LOB 由两个角色运营 - 分析师和主管。分析师生成和分析业务报表,主管查询报表。

User Privileges

LOB A 独立管理数据库 DB_A,LOB B 管理数据库 DB_B。LOB A 和 LOB B 在 DB_C 中使用不同的表。DB_PUBLIC 可以由两个 LOB 的所有成员访问。

User Privileges

由于不同的成员对不同的数据库和表执行不同的操作,我们建议您根据他们的服务和职位创建角色,仅将必要的权限应用于每个角色,并将这些角色分配给相应的成员。 如下图所示

User Privileges

  1. 将系统定义的角色 db_adminuser_admincluster_admin 分配给集群维护人员,将 db_adminuser_admin 设置为他们的默认角色以进行日常维护,并在他们需要操作集群节点时手动激活角色 cluster_admin

    示例

    GRANT db_admin, user_admin, cluster_admin TO USER user_platform;
    ALTER USER user_platform DEFAULT ROLE db_admin, user_admin;
  2. 为 LOB 中的每个成员创建用户,并为每个用户设置复杂的密码。

  3. 为 LOB 中的每个职位创建角色,并将相应的权限应用于每个角色。

    对于每个 LOB 的主管,授予他们的角色 LOB 需要的最大权限集合,以及相应的 GRANT 权限(通过在语句中指定 WITH GRANT OPTION)。 因此,他们可以将这些权限分配给其 LOB 的成员。 如果他们的日常工作需要,请将角色设置为他们的默认角色。

    示例

    GRANT SELECT, ALTER, INSERT, UPDATE, DELETE ON ALL TABLES IN DATABASE DB_A TO ROLE linea_admin WITH GRANT OPTION;
    GRANT SELECT, ALTER, INSERT, UPDATE, DELETE ON TABLE TABLE_C1, TABLE_C2, TABLE_C3 TO ROLE linea_admin WITH GRANT OPTION;
    GRANT linea_admin TO USER user_linea_admin;
    ALTER USER user_linea_admin DEFAULT ROLE linea_admin;

    对于分析师和主管,为他们分配具有相应权限的角色。

    示例

    GRANT SELECT ON ALL TABLES IN DATABASE DB_A TO ROLE linea_query;
    GRANT SELECT ON TABLE TABLE_C1, TABLE_C2, TABLE_C3 TO ROLE linea_query;
    GRANT linea_query TO USER user_linea_salesa;
    GRANT linea_query TO USER user_linea_salesb;
    ALTER USER user_linea_salesa DEFAULT ROLE linea_query;
    ALTER USER user_linea_salesb DEFAULT ROLE linea_query;
  4. 对于数据库 DB_PUBLIC,可以由所有集群用户访问,将 DB_PUBLIC 上的 SELECT 权限授予系统定义的角色 public

    示例

    GRANT SELECT ON ALL TABLES IN DATABASE DB_PUBLIC TO ROLE public;

您可以将角色分配给其他人,以实现复杂场景中的角色继承。

例如,如果分析师需要写入和查询 DB_PUBLIC 中表的权限,而主管只能查询这些表,您可以创建角色 public_analysispublic_sales,将相关权限应用于这些角色,并将它们分别分配给分析师和主管的原始角色。

示例

CREATE ROLE public_analysis;
CREATE ROLE public_sales;
GRANT SELECT, ALTER, INSERT, UPDATE, DELETE ON ALL TABLES IN DATABASE DB_PUBLIC TO ROLE public_analysis;
GRANT SELECT ON ALL TABLES IN DATABASE DB_PUBLIC TO ROLE public_sales;
GRANT public_analysis TO ROLE linea_analysis;
GRANT public_analysis TO ROLE lineb_analysis;
GRANT public_sales TO ROLE linea_query;
GRANT public_sales TO ROLE lineb_query;

根据场景自定义角色

我们建议您自定义角色以管理权限和用户。 以下示例对一些常见场景的权限组合进行分类。

授予 StarRocks 表的全局只读权限

-- Create a role.
CREATE ROLE read_only;
-- Grant the USAGE privilege on all catalogs to the role.
GRANT USAGE ON ALL CATALOGS TO ROLE read_only;
-- Grant the privilege to query all tables to the role.
GRANT SELECT ON ALL TABLES IN ALL DATABASES TO ROLE read_only;
-- Grant the privilege to query all views to the role.
GRANT SELECT ON ALL VIEWS IN ALL DATABASES TO ROLE read_only;
-- Grant the privilege to query all materialized views and the privilege to accelerate queries with them to the role.
GRANT SELECT ON ALL MATERIALIZED VIEWS IN ALL DATABASES TO ROLE read_only;

您可以进一步授予在查询中使用 UDF 的权限

-- Grant the USAGE privilege on all database-level UDF to the role.
GRANT USAGE ON ALL FUNCTIONS IN ALL DATABASES TO ROLE read_only;
-- Grant the USAGE privilege on global UDF to the role.
GRANT USAGE ON ALL GLOBAL FUNCTIONS TO ROLE read_only;

授予 StarRocks 表的全局写入权限

-- Create a role.
CREATE ROLE write_only;
-- Grant the USAGE privilege on all catalogs to the role.
GRANT USAGE ON ALL CATALOGS TO ROLE write_only;
-- Grant the INSERT and UPDATE privileges on all tables to the role.
GRANT INSERT, UPDATE ON ALL TABLES IN ALL DATABASES TO ROLE write_only;
-- Grant the REFRESH privilege on all materialized views to the role.
GRANT REFRESH ON ALL MATERIALIZED VIEWS IN ALL DATABASES TO ROLE write_only;

授予特定外部目录的只读权限

-- Create a role.
CREATE ROLE read_catalog_only;
-- Grant the USAGE privilege on the destination catalog to the role.
GRANT USAGE ON CATALOG hive_catalog TO ROLE read_catalog_only;
-- Switch to the corresponding catalog.
SET CATALOG hive_catalog;
-- Grant the privileges to query all tables and all views in the external catalog.
GRANT SELECT ON ALL TABLES IN ALL DATABASES TO ROLE read_catalog_only;
提示

对于外部目录中的视图,您只能查询 Hive 表视图(自 v3.1 起)。

授予特定外部目录的只写权限

您只能将数据写入 Iceberg 表(自 v3.1 起)和 Hive 表(自 v3.2 起)。

-- Create a role.
CREATE ROLE write_catalog_only;
-- Grant the USAGE privilege on the destination catalog to the role.
GRANT USAGE ON CATALOG iceberg_catalog TO ROLE read_catalog_only;
-- Switch to the corresponding catalog.
SET CATALOG iceberg_catalog;
-- Grant the privilege to write data into Iceberg tables.
GRANT INSERT ON ALL TABLES IN ALL DATABASES TO ROLE write_catalog_only;

授予特定数据库的管理权限

-- Create a role.
CREATE ROLE db1_admin;
-- Grant ALL privileges on the destination database to the role. This role can create tables, views, materialized views, and UDFs in this database. And it also can drop or modify this database.
GRANT ALL ON DATABASE db1 TO ROLE db1_admin;
-- Switch to the corresponding catalog.
SET CATALOG iceberg_catalog;
-- Grant all privileges on tables, views, materialized views, and UDFs in this database to the role.
GRANT ALL ON ALL TABLES IN DATABASE db1 TO ROLE db1_admin;
GRANT ALL ON ALL VIEWS IN DATABASE db1 TO ROLE db1_admin;
GRANT ALL ON ALL MATERIALIZED VIEWS IN DATABASE db1 TO ROLE db1_admin;
GRANT ALL ON ALL FUNCTIONS IN DATABASE db1 TO ROLE db1_admin;

授予在全局、数据库、表和分区级别执行备份和恢复操作的权限

  • 授予执行全局备份和恢复操作的权限

    执行全局备份和恢复操作的权限允许角色备份和恢复任何数据库、表或分区。 它需要系统级别的 REPOSITORY 权限、在默认目录中创建数据库的权限、在任何数据库中创建表的权限,以及在任何表上加载和导出数据的权限。

    -- Create a role.
    CREATE ROLE recover;
    -- Grant the REPOSITORY privilege on the SYSTEM level.
    GRANT REPOSITORY ON SYSTEM TO ROLE recover;
    -- Grant the privilege to create databases in the default catalog.
    GRANT CREATE DATABASE ON CATALOG default_catalog TO ROLE recover;
    -- Grant the privilege to create tables in any database.
    GRANT CREATE TABLE ON ALL DATABASES TO ROLE recover;
    -- Grant the privilege to load and export data on any table.
    GRANT INSERT, EXPORT ON ALL TABLES IN ALL DATABASES TO ROLE recover;
  • 授予执行数据库级别备份和恢复操作的权限

    执行数据库级别备份和恢复操作的权限需要系统级别的 REPOSITORY 权限、在默认目录中创建数据库的权限、在任何数据库中创建表的权限、将数据加载到任何表的权限,以及从要备份的数据库中的任何表导出数据的权限。

    -- Create a role.
    CREATE ROLE recover_db;
    -- Grant the REPOSITORY privilege on the SYSTEM level.
    GRANT REPOSITORY ON SYSTEM TO ROLE recover_db;
    -- Grant the privilege to create databases.
    GRANT CREATE DATABASE ON CATALOG default_catalog TO ROLE recover_db;
    -- Grant the privilege to create tables.
    GRANT CREATE TABLE ON ALL DATABASES TO ROLE recover_db;
    -- Grant the privilege to load data into any table.
    GRANT INSERT ON ALL TABLES IN ALL DATABASES TO ROLE recover_db;
    -- Grant the privilege to export data from any table in the database to be backed up.
    GRANT EXPORT ON ALL TABLES IN DATABASE <db_name> TO ROLE recover_db;
  • 授予执行表级别备份和恢复操作的权限

    执行表级别备份和恢复操作的权限需要系统级别的 REPOSITORY 权限、在相应数据库中创建表的权限、将数据加载到数据库中任何表的权限,以及从要备份的表导出数据的权限。

    -- Create a role.
    CREATE ROLE recover_tbl;
    -- Grant the REPOSITORY privilege on the SYSTEM level.
    GRANT REPOSITORY ON SYSTEM TO ROLE recover_tbl;
    -- Grant the privilege to create tables in corresponding databases.
    GRANT CREATE TABLE ON DATABASE <db_name> TO ROLE recover_tbl;
    -- Grant the privilege to load data into any table in a database.
    GRANT INSERT ON ALL TABLES IN DATABASE <db_name> TO ROLE recover_db;
    -- Grant the privilege to export data from the table you want to back up.
    GRANT EXPORT ON TABLE <table_name> TO ROLE recover_tbl;
  • 授予执行分区级别备份和恢复操作的权限

    执行分区级别备份和恢复操作的权限需要系统级别的 REPOSITORY 权限,以及在相应表上加载和导出数据的权限。

    -- Create a role.
    CREATE ROLE recover_par;
    -- Grant the REPOSITORY privilege on the SYSTEM level.
    GRANT REPOSITORY ON SYSTEM TO ROLE recover_par;
    -- Grant the privilege to load and export data on the corresponding table.
    GRANT INSERT, EXPORT ON TABLE <table_name> TO ROLE recover_par;