Операции с привилегиями

  • GRANT — Предоставление привилегий

  • REVOKE — Отзыв привилегий

  • SHOW GRANTS — Просмотр привилегий

  • SHOW OWNER — Просмотр владельца


grants
Общая схема операций с привилегиями и ролями

Предоставление привилегий

Привилегии на каталог

GRANT <catalog_privileges> ON CATALOG TO [ROLE | USER] <name>;

Предоставляет роли или пользователю указанные привилегии на каталог.

<catalog_privileges> — это список привилегий, разделенный запятыми.

Доступные привилегии на каталог:

  • ADMIN — все возможные действия с каталогом, включая предоставление привилегий на него.

  • ALL — все возможные действия с каталогом, кроме предоставления привилегий на него.

  • CREATE USER — создание пользователей.

  • CREATE ROLE — создание ролей.

  • CREATE WORKER POOL — создание вычислительных пулов.

  • CREATE TABLE — создание таблиц.

  • CREATE VIEW — создание представлений.

  • CREATE SCHEMA — создание схем.

  • MONITOR — получение метаданных каталога.

Привилегии на внешний каталог

GRANT <external_catalog_privileges> ON EXTERNAL CATALOG <external_catalog_name> TO [ROLE | USER] <name>;

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

<external_catalog_privileges> — это список привилегий, разделенный запятыми.

Доступные привилегии на внешний каталог:

  • OWNERSHIP — позволяет изменять владельца внешнего каталога.

  • SELECT — позволяет делать запросы SELECT во внешнем каталоге.

Привилегии на вычислительные пулы

GRANT <worker_pool_privileges> ON WORKER POOL <worker_pool_name> TO [ROLE | USER] <name>;

Предоставляет роли или пользователю указанные привилегии на вычислительный пул.

<worker_pool_privileges> — это список привилегий, разделенный запятыми.

Доступные привилегии на вычислительные пулы:

  • ADMIN — все возможные действия с вычислительным пулом, включая предоставление привилегий на него.

  • ALL — все возможные действия с вычислительным пулом, кроме предоставления привилегий на него.

  • OWNERSHIP — изменение владельца вычислительного пула.

  • USAGE — использование вычислительного пула.

  • MONITOR — мониторинг вычислительного пула.

Посмотреть пример

Предоставим пользователю tengri_user привилегии USAGE и MONITOR на вычислительный пул compute_xl.

GRANT USAGE, MONITOR
    ON WORKER POOL compute_xl
    TO tengri_user;

Привилегии на схемы

GRANT <schema_privileges> ON SCHEMA <schema_name> TO [ROLE | USER] <name>;

Предоставляет роли или пользователю указанные привилегии на указанную схему.

<schema_privileges> — это список привилегий, разделенный запятыми.

Доступные привилегии на схемы:

  • ADMIN — все возможные действия со схемой, включая предоставление привилегий на нее.

  • ALL — все возможные действия со схемой, кроме предоставления привилегий на нее.

  • OWNERSHIP — позволяет изменять владельца схемы.

  • CREATE TABLE — позволяет создавать таблицы в схеме.

  • CREATE VIEW — позволяет создавать представления в схеме.

  • ALTER — позволяет изменять свойства схемы.

  • USAGE — разрешает доступ к объектам в схеме.

  • MONITOR — разрешает доступ к метаданным схемы.

Посмотреть пример

Предоставим роли junior_admin привилегии MONITOR и MODIFY на схему main_schema.

GRANT MONITOR, MODIFY
    ON SCHEMA main_schema
    TO ROLE junior_admin;

Привилегии на таблицы и представления

Прямой синтаксис:

GRANT <table_privileges>
    ON (TABLE | VIEW) <table_name>
    TO [ROLE | USER] <name>;

Темпоральный синтаксис:

GRANT <table_privileges>
    ON ALL [EXISTING] [[AND] FUTURE] (TABLES | VIEWS | TABLES AND VIEWS)
    IN [SCHEMA] <schema_name>
    TO [ROLE | USER] <name>;

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

<table_privileges> — это список привилегий, разделенный запятыми.

Доступные привилегии на таблицы и представления:

  • ALL — позволяет производить все возможные действия с таблицей, кроме предоставления привилегий на нее.

  • OWNERSHIP — позволяет изменять владельца таблицы.

  • ALTER — позволяет изменять свойства таблицы.

  • DROP — позволяет удалить таблицу.

  • TRUNCATE — позволяет удалить все строки из таблицы.

  • SELECT — позволяет читать данные из таблицы.

  • INSERT — позволяет добавлять новые строки в таблицу.

  • UPDATE — позволяет изменять существующие строки в таблице.

  • DELETE — позволяет удалять строки из таблицы.

  • MONITOR — позволяет просматривать метаданные таблицы без чтения данных из нее.

Чтобы выдать привилегию на все существующие (или те, которые будут созданы в будущем) объекты внутри схемы, используется темпоральный синтаксис.

  • Модификатор EXISTING ограничивает предоставление привилегий только существующими объектами.

  • Модификатор FUTURE ограничивает предоставление привилегий объектами, которые будут созданы в будущем.

Если ни один модификатор не указан, то действие распространяется на все объекты — и уже существующие, и те, которые будут созданы в будущем.

Посмотреть пример

Предоставим роли junior_admin привилегии SELECT и INSERT на все существующие таблицы и представления внутри схемы main_schema.

GRANT SELECT, INSERT
    ON EXISTING TABLES AND VIEWS
    IN SCHEMA main_schema
    TO ROLE junior_admin;

Привилегии на пользователей

GRANT <user_privileges> ON USER <user_name> TO [ROLE | USER] <name>;

Предоставляет роли или пользователю указанные привилегии на пользователя.

<user_privileges> — это список привилегий, разделенный запятыми.

Доступные привилегии на пользователей:

  • ADMIN — позволяет производить все возможные действия с пользователем, включая предоставление привилегий на него.

  • ALL — позволяет производить все возможные действия с пользователем, кроме предоставления привилегий на него.

  • CREATE API TOKEN — позволяет создавать API-токен от имени другого пользователя.

  • MONITOR — позволяет просматривать метаданные пользователя.

  • OWNERSHIP — позволяет изменять владельца пользователя.

Привилегии на роли

GRANT OWNERSHIP ON ROLE <role_name> TO [ROLE | USER] <name>;

Предоставляет роли или пользователю привилегию OWNERSHIP на роль.

  • OWNERSHIP — позволяет изменять владельца роли.

Другие привилегии на роли не поддерживаются.

Привилегии на API-токены

GRANT OWNERSHIP ON API TOKEN <token_name> TO [ROLE | USER] <name>;

Предоставляет роли или пользователю привилегию OWNERSHIP на API-токен.

  • OWNERSHIP — позволяет изменять владельца API-токена.

Другие привилегии на API-токены не поддерживаются.

Привилегии на провайдеры идентификации

GRANT OWNERSHIP ON IDP <idp_name> TO [ROLE | USER] <name>;

Предоставляет роли или пользователю привилегию OWNERSHIP на провайдер идентификации.

  • OWNERSHIP — позволяет изменять владельца провайдера идентификации.

Другие привилегии на провайдеры идентификации не поддерживаются.


Ключевые слова ROLE и USER перед именем целевой роли или пользователя не являются обязательными.

Отзыв привилегий

REVOKE <schema_privileges>
    ON SCHEMA <schema_name> FROM [ROLE | USER] <name>;

REVOKE <table_privileges>
    ON (TABLE | VIEW) <table_name> [IN SCHEMA <schema_name>] FROM [ROLE | USER] <name>;

REVOKE <catalog_privileges>
    ON CATALOG FROM [ROLE | USER] <name>;

REVOKE <external_catalog_privileges>
    ON EXTERNAL CATALOG <external_catalog_name> FROM [ROLE | USER] <name>;

REVOKE <worker_pool_privileges>
    ON WORKER POOL <worker_pool_name> FROM [ROLE | USER] <name>;

REVOKE <user_privileges>
    ON USER <user_name> FROM [ROLE | USER] <name>;

REVOKE OWNERSHIP
    ON ROLE <role_name> FROM [ROLE | USER] <name>;

REVOKE OWNERSHIP
    ON API TOKEN <api_token_name> FROM [ROLE | USER] <name>;

REVOKE OWNERSHIP
    ON IDP <identity_provider_name> FROM [ROLE | USER] <name>;

Отзывает указанные привилегии на указанный объект у роли или пользователя.

<..._privileges> — это списки привилегий, разделенные запятыми. Конкретные привилегии зависят от целевого объекта.

Посмотреть пример

Отзовем у роли junior_admin привилегии SELECT и INSERT на все существующие таблицы и представления внутри схемы main_schema.

REVOKE SELECT, INSERT
    ON EXISTING TABLES AND VIEWS
    IN SCHEMA main_schema
    FROM ROLE junior_admin;

Просмотр привилегий

SHOW GRANTS ON <table_name | schema_name>;

Выводит список привилегий на указанный объект (таблицу или схему) для текущего пользователя.

Посмотреть пример
SHOW GRANTS ON demo.weekdays;
+------------+---------------------------------+
| role       | privilege                       |
+------------+---------------------------------+
| test_user  | {SELECT on TABLE demo.weekdays} |
+------------+---------------------------------+
Чтобы увидеть привилегии на объект для всех пользователей, можно использовать системную таблицу system.privileges.

Просмотр владельца

SHOW OWNER OF <table_name | schema_name>;

Выводит владельца (имя пользователя) указанного объекта (таблицы или схемы).