GRANT
Предоставляет роли или привилегии на конкретные объекты пользователю, роли или внешней группе.
Для получения дополнительной информации о привилегиях, которые могут быть предоставлены, см. Элементы привилегий.
Для получения дополнительной информации о создании внешней группы см. Group Provider.
После выполнения операции 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 | SECURITY }
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 вы можете предоставить привилегию CREATE TABLE только для баз данных Hive (начиная с версии v1.5.2) и Iceberg (начиная с версии v1.5.2).
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 ]
-- Предоставление привилегий на ВСЕ ТАБЛИЦЫ в конкретной базе данных или во всех базах данных.
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>для представления таблицы. -
Вы можете предоставить привилегию SELECT на все таблицы в Internal и External Catalogs для чтения данных из этих таблиц. Для таблиц в Hive и Iceberg Catalogs вы можете предоставить привилегию INSERT для записи данных в такие таблицы (поддерживается начиная с v1.5.2 для Iceberg и v1.5.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>для представления view. -
Для таблиц в External Catalog вы можете предоставить только привилегию SELECT на view таблиц Hive (начиная с версии v1.5.2).
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>для представления 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>для представления function.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>
GRANT <role_name> [,<role_name>, ...] TO EXTERNAL GROUP <external_group_name>
Примеры
Пример 1: Предоставить привилегию чтения данных из всех таблиц во всех базах данных пользователю jack.
GRANT SELECT ON *.* TO 'jack'@'%';
Пример 2: Предоставить привилегию загрузки данных во все таблицы базы данных db1 роли my_role.
GRANT INSERT ON db1.* TO ROLE 'my_role';
Пример 3: Предоставить привилегии чтения, обновления и загрузки данных в таблицу tbl1 базы данных db1 пользователю jack.
GRANT SELECT,ALTER,INSERT ON db1.tbl1 TO 'jack'@'192.8.%';
Пример 4: Предоставить привилегию использования всех ресурсов пользователю jack.
GRANT USAGE ON RESOURCE * TO 'jack'@'%';
Пример 5: Предоставить привилегию использования ресурса spark_resource пользователю jack.
GRANT USAGE ON RESOURCE 'spark_resource' TO 'jack'@'%';
Пример 6: Предоставить привилегию использования ресурса spark_resource роли my_role.
GRANT USAGE ON RESOURCE 'spark_resource' TO ROLE 'my_role';
Пример 7: Предоставить привилегию чтения данных из таблицы sr_member пользователю jack и разрешить пользователю 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'@'%';
Пример 10: Предоставить системные роли db_admin, user_admin и cluster_admin внешней группе admin_group.
GRANT db_admin, user_admin, cluster_admin TO EXTERNAL GROUP admin_group;
Лучшие практики
Настройка ролей в зависимости от сценариев
Мы рекомендуем создавать пользовательские роли для управления привилегиями и пользователями. Следующие примеры классифицируют несколько комбинаций привилегий для распространённых сценариев.