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>}