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

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

В этой статье описывается, как управлять пользователями, ролями и привилегиями в Selena.

Selena использует как управление доступом на основе ролей (RBAC), так и управление доступом на основе идентификации (IBAC) для управления привилегиями внутри cluster'а Selena, что позволяет администраторам cluster'а легко ограничивать привилегии внутри cluster'а на различных уровнях детализации.

Внутри cluster'а Selena привилегии могут быть предоставлены пользователям или ролям. Роль — это набор привилегий, которые могут быть назначены пользователям или другим ролям в cluster'е по мере необходимости. Пользователю может быть предоставлена одна или несколько ролей, которые определяют их разрешения для различных объектов.

Просмотр информации о привилегиях и ролях

Пользователи с системной ролью user_admin могут просматривать всю информацию о пользователях и ролях внутри cluster'а Selena.

Просмотр информации о привилегиях

Вы можете просмотреть привилегии, предоставленные пользователю или роли, используя SHOW GRANTS.

  • Просмотр привилегий текущего пользователя.

    SHOW GRANTS;

    NOTE

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

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

    Следующий пример показывает привилегии пользователя jack:

    SHOW GRANTS FOR jack@'172.10.1.10';
  • Просмотр привилегий конкретной роли.

    Следующий пример показывает привилегии роли example_role:

    SHOW GRANTS FOR ROLE example_role;

Просмотр ролей

Вы можете просмотреть все роли внутри cluster'а Selena, используя SHOW ROLES.

SHOW ROLES;

Управление ролями

Пользователи с системной ролью user_admin могут создавать, предоставлять, отзывать или удалять роли в Selena.

Создание роли

Вы можете создать роль, используя CREATE ROLE. По умолчанию пользователь может иметь максимум 64 роли. Вы можете настроить этот параметр, используя динамический параметр FE privilege_max_total_roles_per_user. Роль может иметь максимум 16 уровней наследования. Вы можете настроить этот параметр, используя динамический параметр FE privilege_max_role_depth.

Следующий пример создаёт роль example_role:

CREATE ROLE example_role;

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

Вы можете предоставить роли пользователю или другой роли, используя GRANT.

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

    Следующий пример предоставляет роль example_role пользователю jack:

    GRANT example_role TO USER jack@'172.10.1.10';
  • Предоставление роли другой роли.

    Следующий пример предоставляет роль example_role роли test_role:

    GRANT example_role TO ROLE test_role;
  • Предоставление роли группе пользователей. Вы можете идентифицировать группы пользователей из внешних систем аутентификации через Group Provider.

    Следующий пример предоставляет роль example_role группе пользователей analysts:

    GRANT example_role TO EXTERNAL GROUP analysts;

Изменение роли по умолчанию для пользователя

Роль по умолчанию пользователя автоматически активируется при подключении пользователя к Selena. Инструкции о том, как включить все роли (по умолчанию и предоставленные) для пользователя после подключения, см. в разделе Включение всех ролей.

Вы можете установить роль по умолчанию для пользователя, используя SET DEFAULT ROLE или ALTER USER.

Оба следующих примера устанавливают роль по умолчанию для jack как db1_admin. Обратите внимание, что db1_admin должна быть назначена jack.

  • Установка роли по умолчанию с помощью SET DEFAULT ROLE:

    SET DEFAULT ROLE 'db1_admin' TO jack@'172.10.1.10';
  • Установка роли по умолчанию с помощью ALTER USER:

    ALTER USER jack@'172.10.1.10' DEFAULT ROLE 'db1_admin';

Отзыв роли

Вы можете отозвать роли у пользователя или другой роли, используя REVOKE.

NOTE

Вы не можете отозвать системную роль по умолчанию PUBLIC у пользователя.

  • Отзыв роли у пользователя.

    Следующий пример отзывает роль example_role у пользователя jack:

    REVOKE example_role FROM USER jack@'172.10.1.10';
  • Отзыв роли у другой роли.

    Следующий пример отзывает роль example_role у роли test_role:

    REVOKE example_role FROM ROLE test_role;

Удаление роли

Вы можете удалить роль, используя DROP ROLE.

Следующий пример удаляет роль example_role:

DROP ROLE example_role;

CAUTION

Системные роли не могут быть удалены.

Включение всех ролей

Роли по умолчанию пользователя — это роли, которые автоматически активируются каждый раз, когда пользователь подключается к cluster'у Selena.

Если вы хотите включить все роли (роли по умолчанию и предоставленные роли) для всех пользователей Selena при подключении к cluster'у Selena, вы можете выполнить следующую операцию.

Эта операция требует системной привилегии OPERATE.

SET GLOBAL activate_all_roles_on_login = TRUE;

Вы также можете использовать SET ROLE для активации ролей, назначенных вам. Например, пользователь jack@'172.10.1.10' имеет роли db_admin и user_admin, но они не являются ролями по умолчанию пользователя и не активируются автоматически при подключении пользователя к Selena. Если jack@'172.10.1.10' необходимо активировать db_admin и user_admin, он может выполнить SET ROLE db_admin, user_admin;. Обратите внимание, что SET ROLE перезаписывает исходные роли. Если вы хотите включить все свои роли, выполните SET ROLE ALL.

Управление привилегиями

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

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

Вы можете предоставить привилегии пользователю или роли, используя GRANT.

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

    Следующий пример предоставляет привилегию SELECT на таблицу sr_member пользователю jack и позволяет jack предоставлять эту привилегию другим пользователям или ролям (указав WITH GRANT OPTION в SQL):

    GRANT SELECT ON TABLE sr_member TO USER jack@'172.10.1.10' WITH GRANT OPTION;
  • Предоставление привилегии роли.

    Следующий пример предоставляет привилегию SELECT на таблицу sr_member роли example_role:

    GRANT SELECT ON TABLE sr_member TO ROLE example_role;

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

Вы можете отозвать привилегии у пользователя или роли, используя REVOKE.

  • Отзыв привилегии у пользователя.

    Следующий пример отзывает привилегию SELECT на таблицу sr_member у пользователя jack и запрещает jack предоставлять эту привилегию другим пользователям или ролям:

    REVOKE SELECT ON TABLE sr_member FROM USER jack@'172.10.1.10';
  • Отзыв привилегии у роли.

    Следующий пример отзывает привилегию SELECT на таблицу sr_member у роли example_role:

    REVOKE SELECT ON TABLE sr_member FROM ROLE example_role;

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

Управление доступом для нескольких сервисов

Обычно cluster Selena, принадлежащий компании, управляется единственным поставщиком услуг и поддерживает несколько направлений бизнеса (LOB), каждое из которых использует одну или несколько баз данных.

Как показано ниже, пользователи cluster'а Selena включают членов от поставщика услуг и двух направлений бизнеса (A и B). Каждое направление бизнеса управляется двумя ролями — аналитиками и руководителями. Аналитики генерируют и анализируют бизнес-отчёты, а руководители запрашивают эти отчёты.

User Privileges

Направление бизнеса A независимо управляет базой данных DB_A, а направление бизнеса B — базой данных DB_B. Направления бизнеса A и B используют разные таблицы в DB_C. DB_PUBLIC доступна всем членам обоих направлений бизнеса.

User Privileges

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

User Privileges

  1. Назначьте системные роли db_admin, user_admin и cluster_admin сопровождающим cluster'а, установите db_admin и user_admin в качестве их ролей по умолчанию для ежедневного обслуживания и вручную активируйте роль cluster_admin, когда им нужно выполнять операции с узлами cluster'а.

    Пример:

    GRANT db_admin, user_admin, cluster_admin TO USER user_platform;
    ALTER USER user_platform DEFAULT ROLE db_admin, user_admin;
  2. Создайте пользователей для каждого члена внутри направлений бизнеса и установите сложные пароли для каждого пользователя.

  3. Создайте роли для каждой должности внутри направлений бизнеса и примените соответствующие привилегии к каждой роли.

    Для директора каждого направления бизнеса предоставьте их роли максимальный набор привилегий, необходимых их направлению бизнеса, и соответствующие привилегии GRANT (указав WITH GRANT OPTION в выражении). Таким образом, они смогут назначать эти привилегии членам своего направления бизнеса. Установите роль в качестве их роли по умолчанию, если их ежедневная работа требует этого.

    Пример:

    GRANT SELECT, ALTER, INSERT, UPDATE, DELETE ON ALL TABLES IN DATABASE DB_A TO ROLE linea_admin WITH GRANT OPTION;
    GRANT SELECT, ALTER, INSERT, UPDATE, DELETE ON TABLE TABLE_C1, TABLE_C2, TABLE_C3 TO ROLE linea_admin WITH GRANT OPTION;
    GRANT linea_admin TO USER user_linea_admin;
    ALTER USER user_linea_admin DEFAULT ROLE linea_admin;

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

    Пример:

    GRANT SELECT ON ALL TABLES IN DATABASE DB_A TO ROLE linea_query;
    GRANT SELECT ON TABLE TABLE_C1, TABLE_C2, TABLE_C3 TO ROLE linea_query;
    GRANT linea_query TO USER user_linea_salesa;
    GRANT linea_query TO USER user_linea_salesb;
    ALTER USER user_linea_salesa DEFAULT ROLE linea_query;
    ALTER USER user_linea_salesb DEFAULT ROLE linea_query;
  4. Для базы данных DB_PUBLIC, к которой могут получить доступ все пользователи cluster'а, предоставьте привилегию SELECT на DB_PUBLIC системной роли public.

    Пример:

    GRANT SELECT ON ALL TABLES IN DATABASE DB_PUBLIC TO ROLE public;

Вы можете назначать роли другим ролям для достижения наследования ролей в сложных сценариях.

Например, если аналитикам требуются привилегии на запись и запрос таблиц в DB_PUBLIC, а руководители могут только запрашивать эти таблицы, вы можете создать роли public_analysis и public_sales, применить соответствующие привилегии к ролям и назначить их исходным ролям аналитиков и руководителей соответственно.

Пример:

CREATE ROLE public_analysis;
CREATE ROLE public_sales;
GRANT SELECT, ALTER, INSERT, UPDATE, DELETE ON ALL TABLES IN DATABASE DB_PUBLIC TO ROLE public_analysis;
GRANT SELECT ON ALL TABLES IN DATABASE DB_PUBLIC TO ROLE public_sales;
GRANT public_analysis TO ROLE linea_analysis;
GRANT public_analysis TO ROLE lineb_analysis;
GRANT public_sales TO ROLE linea_query;
GRANT public_sales TO ROLE lineb_query;

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

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

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