Перейти к основному содержимому

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, другим пользователям и ролям.

Синтаксис

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

Система

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;

Внутренний 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 перед выполнением этой команды.
  • Для баз данных в External Catalog вы можете предоставить привилегию CREATE TABLE только для баз данных Hive (начиная с версии 1.5.0) и Iceberg (начиная с версии 1.5.0).

Таблица

-- Предоставление привилегий на КОНКРЕТНЫЕ ТАБЛИЦЫ.
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 на все таблицы во внутренних и внешних каталогах для чтения данных из этих таблиц. Для таблиц в каталогах Hive и Iceberg вы можете предоставить привилегию INSERT для записи данных в такие таблицы (поддерживается с версии 3.1 для Iceberg и версии 3.2 для Hive)

    GRANT <priv> ON TABLE <db_name>.<table_name> TO {ROLE <role_name> | USER <user_name>}

Представление

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> для представления представления.

  • Для таблиц в External Catalog вы можете предоставить только привилегию SELECT на представления таблиц Hive (начиная с версии 1.5.0).

    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> для представления материализованного представления.

    GRANT <priv> ON MATERIALIZED VIEW <db_name>.<mv_name> TO {ROLE <role_name> | USER <user_name>}

Функция

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

Пользователь

GRANT IMPERSONATE
ON USER <user_identity>
TO USER <user_identity_1> [ WITH GRANT OPTION ]

Том хранения

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: Предоставить привилегию загрузки данных во все таблицы базы данных 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'@'%';

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

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

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

Предоставление глобальных привилегий только для чтения на таблицы 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;

Предоставление привилегий только для чтения на конкретный external catalog

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

Для представлений в external catalog вы можете запрашивать только представления таблиц Hive (начиная с версии 1.5.0).

Предоставление привилегий только для записи на конкретный external catalog

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

-- Создать роль.
CREATE ROLE write_catalog_only;
-- Предоставить привилегию USAGE на целевой catalog роли.
GRANT USAGE ON CATALOG iceberg_catalog TO ROLE read_catalog_only;
-- Переключиться на соответствующий catalog.
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;
-- Переключиться на соответствующий catalog.
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;

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

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

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

    -- Создать роль.
    CREATE ROLE recover;
    -- Предоставить привилегию REPOSITORY на уровне SYSTEM.
    GRANT REPOSITORY ON SYSTEM TO ROLE recover;
    -- Предоставить привилегию создания баз данных в catalog по умолчанию.
    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, привилегии создания баз данных в catalog по умолчанию, привилегии создания таблиц в любой базе данных, привилегии загрузки данных в любую таблицу и привилегии экспорта данных из любой таблицы в базе данных, которую нужно скопировать.

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

    Привилегии для выполнения операций резервного копирования и восстановления на уровне раздела требуют привилегии 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;

Для лучших практик контроля доступа к нескольким сервисам см. Контроль доступа к нескольким сервисам.