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 ]
Resource group 相关
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 ]
Resource 相关
GRANT
{ USAGE | ALTER | DROP | ALL [PRIVILEGES] }
ON { RESOURCE <resource_name> [, < resource_name >,...] | ALL RESOURCES}
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
Global 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 ]
Database 相关
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 之后才能使用。
- 对于 External Catalog 下的数据库,只有 Hive 和 Iceberg 数据库支持赋予 CREATE TABLE 权限。
Table 相关
-- 赋予**特定表**的权限。
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 ]
-- 赋予特定或所有 Database 中的**所有表**的权限。
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 之后才能使用。table 还可以用
<db_name>.<table_name>
的方式来进行表示。- 所有 Internal Catalog 和 External Catalog 下的表,都支持赋予 SELECT 权限。Hive 和 Iceberg catalog 下的表,还支持赋予 INSERT 权限 (从 3.1 版本起,支持赋予 Iceberg 表的 INSERT 权限;从 3.2 版本起,支持赋予 Hive 表的 INSERT 权限)。
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 之后才能使用。view 还可以用
<db_name>.<view_name>
的方式来进行表示。- 对于 External Catalog,仅 Hive 表视图支持 SELECT 权限。(3.1 及以后)
GRANT <priv> ON VIEW <db_name>.<view_name> TO {ROLE <role_name> | USER <user_name>}
Materialized view 相关
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>
的方式来进行表示。
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 之后才能使用。function 还可以用 <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>
注意:
- 在角色被赋予给用户之后,用户需要通过 SET ROLE 手动激活角色,方可利用角色的权限。
- 如果希望用户登录时就默认激活角色,则可以通过 ALTER USER 或者 SET DEFAULT ROLE 为用户设置默认角色。
- 如果希望系统内所有用户都能够在登录时默认激活所有权限,则可以设置全局变量
SET GLOBAL activate_all_roles_on_login = TRUE;
。
示例
示例一:将所有数据库及库中所有表的读取权限授予用户 jack
。
GRANT SELECT ON *.* TO 'jack'@'%';
示例二:将数据库 db1
及库中所有表的导入权限授予角色 my_role
。
GRANT INSERT ON db1.* TO ROLE 'my_role';
示例三:将数据 库 db1
和表 tbl1
的读取、结构变更和导入权限授予用户 jack
。
GRANT SELECT,ALTER,INSERT ON db1.tbl1 TO 'jack'@'192.8.%';
示例四:将所有资源的使用权限授予用户 jack
。
GRANT USAGE ON RESOURCE * TO 'jack'@'%';
示例五:将资源 spark_resource
的使用权限授予用户 jack
。
GRANT USAGE ON RESOURCE 'spark_resource' TO 'jack'@'%';
示例六:将资源 spark_resource
的使用权限授予角色 my_role
。
GRANT USAGE ON RESOURCE 'spark_resource' TO ROLE 'my_role';
示例七:将表 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;
示例八:将系统预置角色 db_admin
、user_admin
以及 cluster_admin
赋予给平台运维角色。
GRANT db_admin, user_admin, cluster_admin TO USER user_platform;
示例九:授予用户 jack
以用户 rose
的身份执行操作的权限。
GRANT IMPERSONATE ON USER 'rose'@'%' TO USER 'jack'@'%';
最佳实践 - 基于使用场景创建自定义角色
建议您通过自定义角色管理权限和用户。以下梳理了一些常见场景所需的权限项。
-
StarRocks 内表全局查询权限
-- 创建自定义角色。
CREATE ROLE read_only;
-- 赋予角色所有 Catalog 的使用权限。
GRANT USAGE ON ALL CATALOGS TO ROLE read_only;
-- 赋予角色所有表的查询权限。
GRANT SELECT ON ALL TABLES IN ALL DATABASES TO ROLE read_only;
-- 赋予角色所有视图的查询权限。
GRANT SELECT ON ALL VIEWS IN ALL DATABASES TO ROLE read_only;
-- 赋予角色所有物化视图的查询和加速权限。
GRANT SELECT ON ALL MATERIALIZED VIEWS IN ALL DATABASES TO ROLE read_only;您还可以进一步授予角色在查询中使用 UDF 的权限:
-- 赋予角色所有库级别 UDF 的使用权限。
GRANT USAGE ON ALL FUNCTIONS IN ALL DATABASES TO ROLE read_only;
-- 赋予角色所有全局 UDF 的使用权限。
GRANT USAGE ON ALL GLOBAL FUNCTIONS TO ROLE read_only; -
StarRocks 内表全局写权限
-- 创建自定义角色。
CREATE ROLE write_only;
-- 赋予角色所有 Catalog 的使用权限。
GRANT USAGE ON ALL CATALOGS TO ROLE write_only;
-- 赋予角色所有表的导入、更新权限。
GRANT INSERT, UPDATE ON ALL TABLES IN ALL DATABASES TO ROLE write_only;
-- 赋予角色所有物化视图的更新权限。
GRANT REFRESH ON ALL MATERIALIZED VIEWS IN ALL DATABASES TO ROLE write_only; -
指定外部数据目录(External Catalog)下的查询权限
-- 创建自定义角色。
CREATE ROLE read_catalog_only;
-- 赋予角色目标 Catalog 的 USAGE 权限。
GRANT USAGE ON CATALOG hive_catalog TO ROLE read_catalog_only;
-- 切换到对应数据目录。
SET CATALOG hive_catalog;
-- 赋予角色该 Catalog 下所有表和视图的查询权限。
GRANT SELECT ON ALL TABLES IN ALL DATABASES TO ROLE read_catalog_only;提示对于外部数据目录下的视图,当前仅支持查询 Hive 表的视图 (自 3.1 版本起)。
-
指定外部数据目录(External Catalog)下的写权限
当前仅支持写入数据到 Iceberg 表 (自 3.1 版本起) 和 Hive 表(自 3.2 版本起)。
-- 创建自定义角色。
CREATE ROLE write_catalog_only;
-- 赋予角色目标 Catalog 的 USAGE 权限。
GRANT USAGE ON CATALOG iceberg_catalog TO ROLE read_catalog_only;
-- 切换到对应数据目录。
SET CATALOG iceberg_catalog;
-- 赋予角色所有 Iceberg 表的写入权限。
GRANT INSERT ON ALL TABLES IN ALL DATABASES TO ROLE write_catalog_only; -
指定数据库的管理员权限
-- 创建自定义角色。
CREATE ROLE db1_admin;
-- 赋予角色 db1 的全部权限。用户可以在 db1 内创建表、视图、物化视图、用户自定义函数,并删除、更改 db1。
GRANT ALL ON DATABASE db1 TO ROLE db1_admin;
-- 赋予角色 db1 下所有表、视图、物化视图、用户自定义函数的所有权限。
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 权限,在 Default Catalog 下创建数据库的权限,在任意数据库下创建表的权限,以及对任意表进行导入、导出的权限。
-- 创建自定义角色。
CREATE ROLE recover;
-- 赋予角色 SYSTEM 级的 REPOSITORY 权限。
GRANT REPOSITORY ON SYSTEM TO ROLE recover;
-- 赋予角色创建数据库的权限。
GRANT CREATE DATABASE ON CATALOG default_catalog TO ROLE recover;
-- 赋予角色创建任意表的 权限。
GRANT CREATE TABLE ON ALL DATABASES TO ROLE recover;
-- 赋予角色向任意表导入、导出数据的权限。
GRANT INSERT, EXPORT ON ALL TABLES IN ALL DATABASES TO ROLE recover; -
数据库级备份恢复权限
数据库级备份恢复权限可以对整个数据库进行备份恢复,需要 SYSTEM 级的 REPOSITORY 权限,在 Default Catalog 下创建数据库的权限,在任意数据库下创建表的权限,以及待备份数据库下所有表的导出权限。
-- 创建自定义角色。
CREATE ROLE recover_db;
-- 赋予角色 SYSTEM 级的 REPOSITORY 权限。
GRANT REPOSITORY ON SYSTEM TO ROLE recover_db;
-- 赋予角色创建数据库的权限。
GRANT CREATE DATABASE ON CATALOG default_catalog TO ROLE recover_db;
-- 赋予角色创建任意表的权限。
GRANT CREATE TABLE ON ALL DATABASES TO ROLE recover_db;
-- 赋予角色向任意表导入数据的权限。
GRANT INSERT ON ALL TABLES IN ALL DATABASES TO ROLE recover_db;
-- 赋予角色向待备份数据库下所有表的导出权限。
GRANT EXPORT ON ALL TABLES IN DATABASE <db_name> TO ROLE recover_db; -
表级备份恢复权限
表级备份恢复权限需要 SYSTEM 级的 REPOSITORY 权限,在待备份数据库下创建表及导入数据的权限, 以及待备份表的导出权限。
-- 创建自定义角色。
CREATE ROLE recover_tbl;
-- 赋予角色 SYSTEM 级的 REPOSITORY 权限。
GRANT REPOSITORY ON SYSTEM TO ROLE recover_tbl;
-- 赋予角色在对应数据库下创建表的权限。
GRANT CREATE TABLE ON DATABASE <db_name> TO ROLE recover_tbl;
-- 赋予角色向任意表导入数据的权限。
GRANT INSERT ON ALL TABLES IN DATABASE <db_name> TO ROLE recover_db;
-- 赋予角色导出待备份表数据的权限。
GRANT EXPORT ON TABLE <table_name> TO ROLE recover_tbl; -
分区级备份恢复权限
分区级备份恢复权限需要 SYSTEM 级的 REPOSITORY 权限,以及对待备份表的导入、导出权限。
-- 创建自定义角色。
CREATE ROLE recover_par;
-- 赋予角色 SYSTEM 级的 REPOSITORY 权限。
GRANT REPOSITORY ON SYSTEM TO ROLE recover_par;
-- 赋予角色对对应表进行导入的权限。
GRANT INSERT, EXPORT ON TABLE <table_name> TO ROLE recover_par;
-
有关多业务线权限管理的相关实践,参见 多业务线权限管理。