Перейти к основному содержимому
Версия: 2.0.x

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;

Лучшие практики

Настройка ролей в зависимости от сценариев

Мы рекомендуем создавать пользовательские роли для управления привилегиями и пользователями. Следующие примеры классифицируют несколько комбинаций привилегий для распространённых сценариев.

Предоставление глобальных привилегий только на чтение для таблиц Selena

-- Создать роль.
CREATE ROLE read_only;
-- Предоставить привилегию USAGE на все каталоги роли.
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 в запросах:

-- Предоставить привилегию USAGE на все UDF уровня базы данных роли.
GRANT USAGE ON ALL FUNCTIONS IN ALL DATABASES TO ROLE read_only;
-- Предоставить привилегию USAGE на глобальные UDF роли.
GRANT USAGE ON ALL GLOBAL FUNCTIONS TO ROLE read_only;

Предоставление глобальных привилегий только на запись для таблиц Selena

-- Создать роль.
CREATE ROLE write_only;
-- Предоставить привилегию USAGE на все каталоги роли.
GRANT USAGE ON ALL CATALOGS TO ROLE write_only;
-- Предоставить привилегии INSERT и UPDATE на все таблицы роли.
GRANT INSERT, UPDATE ON ALL TABLES IN ALL DATABASES TO ROLE write_only;
-- Предоставить привилегию REFRESH на все материализованные представления роли.
GRANT REFRESH ON ALL MATERIALIZED VIEWS IN ALL DATABASES TO ROLE write_only;

Предоставление привилегий только на чтение для определённого внешнего каталога

-- Создать роль.
CREATE ROLE read_catalog_only;
-- Предоставить привилегию USAGE на целевой каталог роли.
GRANT USAGE ON CATALOG hive_catalog TO ROLE read_catalog_only;
-- Переключиться на соответствующий каталог.
SET CATALOG hive_catalog;
-- Предоставить привилегии на запрос всех таблиц и всех представлений во внешнем каталоге.
GRANT SELECT ON ALL TABLES IN ALL DATABASES TO ROLE read_catalog_only;
подсказка

Для представлений во внешних каталогах можно запрашивать только представления таблиц Hive (начиная с v1.5.2).

Предоставление привилегий только на запись для определённого внешнего каталога

Вы можете записывать данные только в таблицы Iceberg (начиная с v1.5.2) и таблицы Hive (начиная с v1.5.2).

-- Создать роль.
CREATE ROLE write_catalog_only;
-- Предоставить привилегию 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;
-- Предоставить ВСЕ привилегии на целевую базу данных роли. Эта роль может создавать таблицы, представления, материализованные представления и UDF в этой базе данных. Она также может удалять или изменять эту базу данных.
GRANT ALL ON DATABASE db1 TO ROLE db1_admin;
-- Переключиться на соответствующий каталог.
SET CATALOG iceberg_catalog;
-- Предоставить все привилегии на таблицы, представления, материализованные представления и UDF в этой базе данных роли.
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;

Предоставление привилегий для выполнения операций резервного копирования и восстановления на глобальном уровне, уровне базы данных, таблицы и partition

  • Предоставление привилегий для выполнения глобальных операций резервного копирования и восстановления:

    Привилегии для выполнения глобальных операций резервного копирования и восстановления позволяют роли создавать резервные копии и восстанавливать любую базу данных, таблицу или partition. Требуется привилегия REPOSITORY на уровне SYSTEM, привилегии на создание баз данных в каталоге по умолчанию, на создание таблиц в любой базе данных, а также на загрузку и экспорт данных в любой таблице.

    -- Создать роль.
    CREATE ROLE recover;
    -- Предоставить привилегию REPOSITORY на уровне SYSTEM.
    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;
  • Предоставление привилегий для выполнения операций резервного копирования и восстановления на уровне базы данных:

    Привилегии для выполнения операций резервного копирования и восстановления на уровне базы данных требуют привилегии REPOSITORY на уровне SYSTEM, привилегии на создание баз данных в каталоге по умолчанию, привилегии на создание таблиц в любой базе данных, привилегии на загрузку данных в любую таблицу и привилегии на экспорт данных из любой таблицы в базе данных для резервного копирования.

    -- Создать роль.
    CREATE ROLE recover_db;
    -- Предоставить привилегию REPOSITORY на уровне SYSTEM.
    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;
  • Предоставление привилегий для выполнения операций резервного копирования и восстановления на уровне таблицы:

    Привилегии для выполнения операций резервного копирования и восстановления на уровне таблицы требуют привилегии REPOSITORY на уровне SYSTEM, привилегии на создание таблиц в соответствующих базах данных, привилегии на загрузку данных в любую таблицу в базе данных и привилегии на экспорт данных из таблицы для резервного копирования.

    -- Создать роль.
    CREATE ROLE recover_tbl;
    -- Предоставить привилегию REPOSITORY на уровне SYSTEM.
    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;
  • Предоставление привилегий для выполнения операций резервного копирования и восстановления на уровне partition:

    Привилегии для выполнения операций резервного копирования и восстановления на уровне partition требуют привилегии REPOSITORY на уровне SYSTEM и привилегии на загрузку и экспорт данных в соответствующей таблице.

    -- Создать роль.
    CREATE ROLE recover_par;
    -- Предоставить привилегию REPOSITORY на уровне SYSTEM.
    GRANT REPOSITORY ON SYSTEM TO ROLE recover_par;
    -- Предоставить привилегию на загрузку и экспорт данных в соответствующей таблице.
    GRANT INSERT, EXPORT ON TABLE <table_name> TO ROLE recover_par;

Лучшие практики управления многосервисным доступом см. в разделе Управление многосервисным доступом.