GRANT
GRANT 语句用于向用户或角色授予对特定对象的一个或多个权限。
授予角色给用户或其他角色。
有关可以授予的权限的更多信息,请参见 权限项。
执行 GRANT 操作后,您可以运行 SHOW GRANTS 来查看详细的权限信息,或者运行 REVOKE 来撤销权限或角色。
在执行 GRANT 操作之前,请确保相关的用户或角色已创建。有关更多信息,请参见 CREATE USER 和 CREATE ROLE。
- 只有具有
user_admin
角色的用户才能向其他用户和角色授予任何权限。 - 将角色授予用户后,您必须运行 SET ROLE 才能激活此角色,然后才能以该角色执行操作。 如果您希望在登录时激活所有默认角色,请运行 ALTER USER 或 SET DEFAULT ROLE。 如果您希望在登录时为所有用户激活系统中的所有权限,请设置全局变量
SET GLOBAL activate_all_roles_on_login = TRUE;
。 - 普通用户只能将具有
WITH GRANT OPTION
关键字的权限授予其他用户和角色。
语法
向角色或用户授予权限
System
GRANT
{ CREATE RESOURCE GROUP | CREATE RESOURCE | CREATE EXTERNAL CATALOG | REPOSITORY | BLACKLIST | FILE | OPERATE | CREATE STORAGE VOLUME }
ON SYSTEM
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
资源组
GRANT
{ ALTER | DROP | ALL [PRIVILEGES] }
ON { RESOURCE GROUP <resource_group_name> [, <resource_group_name >,...] | ALL RESOURCE GROUPS}
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
资源
GRANT
{ USAGE | ALTER | DROP | ALL [PRIVILEGES] }
ON { RESOURCE <resource_name> [, < resource_name >,...] | ALL RESOURCES}
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
全局 UDF
GRANT
{ USAGE | DROP | ALL [PRIVILEGES]}
ON { GLOBAL FUNCTION <function_name>(input_data_type) [, <function_name>(input_data_type),...]
| ALL GLOBAL FUNCTIONS }
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
示例: GRANT usage ON GLOBAL FUNCTION a(string) to kevin;
Internal catalog
GRANT
{ USAGE | CREATE DATABASE | ALL [PRIVILEGES]}
ON CATALOG default_catalog
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
External catalog
GRANT
{ USAGE | DROP | ALL [PRIVILEGES] }
ON { CATALOG <catalog_name> [, <catalog_name>,...] | ALL CATALOGS}
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
数据库
GRANT
{ ALTER | DROP | CREATE TABLE | CREATE VIEW | CREATE FUNCTION | CREATE MATERIALIZED VIEW | ALL [PRIVILEGES] }
ON { DATABASE <database_name> [, <database_name>,...] | ALL DATABASES }
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
- 您必须先运行 SET CATALOG,然后才能运行此命令。
- 对于外部 Catalog 中的数据库,您只能在 Hive(自 v3.1 起)和 Iceberg 数据库(自 v3.2 起)上授予 CREATE TABLE 权限。
表
-- Grant privileges on SPECIFIC TABLES.
GRANT
{ ALTER | DROP | SELECT | INSERT | EXPORT | UPDATE | DELETE | ALL [PRIVILEGES]}
ON TABLE <table_name> [, < table_name >,...]
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
-- Grant privileges on ALL TABLES in a specific database or all databases.
GRANT
{ ALTER | DROP | SELECT | INSERT | EXPORT | UPDATE | DELETE | ALL [PRIVILEGES]}
ON ALL TABLES IN { { DATABASE <database_name> } | ALL DATABASES }
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
-
您必须先运行 SET CATALOG,然后才能运行此命令。
-
您还可以使用
<db_name>.<table_name>
表示表。 -
您可以授予对 Internal 和 External Catalog 中所有表的 SELECT 权限,以读取这些表中的数据。 对于 Hive 和 Iceberg Catalog 中的表,您可以授予 INSERT 权限以将数据写入此类表(自 v3.1 起支持 Iceberg,自 v3.2 起支持 Hive)。
GRANT <priv> ON TABLE <db_name>.<table_name> TO {ROLE <role_name> | USER <user_name>}
View
GRANT
{ ALTER | DROP | SELECT | ALL [PRIVILEGES]}
ON { VIEW <view_name> [, < view_name >,...]
| ALL VIEWS} IN
{ { DATABASE <database_name> } | ALL DATABASES }
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
-
您必须先运行 SET CATALOG,然后才能运行此命令。
-
您还可以使用
<db_name>.<view_name>
表示视图。 -
对于外部 Catalog 中的表,您只能在 Hive 表视图上授予 SELECT 权限(自 v3.1 起)。
GRANT <priv> ON VIEW <db_name>.<view_name> TO {ROLE <role_name> | USER <user_name>}
物化视图
GRANT
{ SELECT | ALTER | REFRESH | DROP | ALL [PRIVILEGES]}
ON { MATERIALIZED VIEW <mv_name> [, < mv_name >,...]
| ALL MATERIALIZED VIEWS} IN
{ { DATABASE <database_name> } | ALL DATABASES }
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
-
您必须先运行 SET CATALOG,然后才能运行此命令。
-
您还可以使用
<db_name>.<mv_name>
表示 mv。GRANT <priv> ON MATERIALIZED VIEW <db_name>.<mv_name> TO {ROLE <role_name> | USER <user_name>}
Function
GRANT
{ USAGE | DROP | ALL [PRIVILEGES]}
ON { FUNCTION <function_name>(input_data_type) [, < function_name >(input_data_type),...]
| ALL FUNCTIONS} IN
{ { DATABASE <database_name> } | ALL DATABASES }
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
-
您必须先运行 SET CATALOG,然后才能运行此命令。
-
您还可以使用
<db_name>.<function_name>
表示函数。GRANT <priv> ON FUNCTION <db_name>.<function_name>(input_data_type) TO {ROLE <role_name> | USER <user_name>}
User
GRANT IMPERSONATE
ON USER <user_identity>
TO USER <user_identity_1> [ WITH GRANT OPTION ]
Storage volume
GRANT
{ USAGE | ALTER | DROP | ALL [PRIVILEGES] }
ON { STORAGE VOLUME < name > [, < name >,...] | ALL STORAGE VOLUMES}
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
授予角色给角色或用户
GRANT <role_name> [,<role_name>, ...] TO ROLE <role_name>
GRANT <role_name> [,<role_name>, ...] TO USER <user_identity>
示例
示例 1:授予用户 jack
读取所有数据库中所有表的权限。
GRANT SELECT ON *.* TO 'jack'@'%';
示例 2:授予角色 my_role
将数据加载到数据库 db1
的所有表中的权限。
GRANT INSERT ON db1.* TO ROLE 'my_role';
示例 3:授予用户 jack
读取、更新和加载数据到数据库 db1
的表 tbl1
中的权限。
GRANT SELECT,ALTER,INSERT ON db1.tbl1 TO 'jack'@'192.8.%';
示例 4:授予用户 jack
使用所有资源的权限。
GRANT USAGE ON RESOURCE * TO 'jack'@'%';
示例 5:授予用户 jack
使用资源 spark_resource
的权限。
GRANT USAGE ON RESOURCE 'spark_resource' TO 'jack'@'%';
示例 6:授予角色 my_role
使用资源 spark_resource
的权限。
GRANT USAGE ON RESOURCE 'spark_resource' TO ROLE 'my_role';
示例 7:授予用户 jack
从表 sr_member
读取数据的权限,并允许用户 jack
将此权限授予其他用户或角色(通过指定 WITH GRANT OPTION)。
GRANT SELECT ON TABLE sr_member TO USER jack@'172.10.1.10' WITH GRANT OPTION;
示例 8:将系统定义的角色 db_admin
、user_admin
和 cluster_admin
授予用户 user_platform
。
GRANT db_admin, user_admin, cluster_admin TO USER user_platform;
示例 9:允许用户 jack
以用户 rose
的身份执行操作。
GRANT IMPERSONATE ON USER 'rose'@'%' TO USER 'jack'@'%';
最佳实践
基于场景自定义角色
我们建议您自定义角色来管理权限和用户。 以下示例对一些常见场景的权限组合进行分类。
授予对 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;
授予对特定外部 Catalog 的只读权限
-- 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;
对于外部 Catalog 中的视图,您只能查询 Hive 表视图(自 v3.1 起)。
授予对特定外部 Catalog 的只写权限
您只能将数据写入 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;
授予在全局、数据库、表和分区级别执行备份和恢复操作的权限
-
授予执行全局备份和恢复操作的权限
执行全局备份和恢复操作的权限允许角色备份和恢复任何数据库、表或分区。 它需要 SYSTEM 级别的 REPOSITORY 权限,在默认 Catalog 中创建数据库的权限,在任何数据库中创建表的权限,以及在任何表上加载和导出数据的权限。
-- 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; -
授予执行数据库级别备份和恢复操作的权限
执行数据库级别备份和恢复操作的权限需要 SYSTEM 级别的 REPOSITORY 权限,在默认 Catalog 中创建数据库的权限,在任何数据库中创建表的权限,将数据加载到任何表中的权限,以及从要备份的数据库中的任何表导出数据的权限。
-- 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; -
授予执行表级别备份和恢复操作的权限
执行表级别备份和恢复操作的权限需要 SYSTEM 级别的 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; -
授予执行分区级别备份和恢复操作的权限
执行分区级别备份和恢复操作的权限需要 SYSTEM 级别的 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;
有关多服务访问控制的最佳实践,请参见 多服务访问控制。