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

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

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

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

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

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

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

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

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

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

    SHOW GRANTS;

    ПРИМЕЧАНИЕ

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

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

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

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

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

    SHOW GRANTS FOR ROLE example_role;

Просмотр свойств пользователя​

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

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

SHOW PROPERTY FOR jack@'172.10.1.10';

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

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

SHOW ROLES;

Просмотр пользователей​

Вы можете просматривать всех пользователей в кластере Selena, используя SHOW USERS.

SHOW USERS;

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

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

Создание пользователя​

Вы можете создать пользователя, указав идентификацию пользователя, метод аутентификации и роль по умолчанию.

Selena поддерживает аутентификацию пользователей с учетными данными для входа или LDAP-аутентификацию. Для получения дополнительной информации об аутентификации Selena см. Authentication. Для получения дополнительной информации и расширенных инструкций по созданию пользователя см. CREATE USER.

Следующий пример создает пользователя jack, разрешает ему подключаться только с IP-адреса 172.10.1.10, устанавливает пароль 12345 для него и назначает роль example_role в качестве роли по умолчанию:

CREATE USER jack@'172.10.1.10' IDENTIFIED BY '12345' DEFAULT ROLE 'example_role';

ПРИМЕЧАНИЕ

  • Selena шифрует пароли пользователей перед их сохранением. Вы можете получить зашифрованный пароль, используя функцию password().
  • Системная роль по умолчанию PUBLIC назначается пользователю, если роль по умолчанию не указана при создании пользователя.

Изменение пользователя​

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

Роль по умолчанию пользователя автоматически активируется, когда пользователь подключается к 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';

Изменение свойств пользователя​

Вы можете установить свойства пользователя, используя ALTER USER.

Следующий пример устанавливает максимальное количество подключений для пользователя jack равным 1000. Идентификации пользователей с одинаковым именем пользователя разделяют одни и те же свойства.

Поэтому вам нужно только установить свойство для jack, и эта настройка вступит в силу для всех идентификаций пользователей с именем пользователя jack.

ALTER USER 'jack' SET PROPERTIES ("max_user_connections" = "1000");

Сброс пароля пользователя​

Вы можете сбросить пароль пользователя, используя SET PASSWORD или ALTER USER.

ПРИМЕЧАНИЕ

  • Любой пользователь может сбросить свой собственный пароль без необходимости каких-либо привилегий.
  • Только сам пользователь root может установить свой пароль. Если вы потеряли его пароль и не можете подключиться к Selena, см. Сброс утерянного пароля root для получения дополнительных инструкций.

Оба следующих примера сбрасывают пароль jack на 54321:

  • Сброс пароля с помощью SET PASSWORD:

    SET PASSWORD FOR jack@'172.10.1.10' = PASSWORD('54321');
  • Сброс пароля с помощью ALTER USER:

    ALTER USER jack@'172.10.1.10' IDENTIFIED BY '54321';

Сброс утерянного пароля root​

Если вы потеряли пароль пользователя root и не можете подключиться к Selena, вы можете сбросить его, выполнив следующие процедуры:

  1. Добавьте следующий элемент конфигурации в файлы конфигурации fe/conf/fe.conf всех узлов FE, чтобы отключить аутентификацию пользователей:

    enable_auth_check = false
  2. Перезапустите все узлы FE, чтобы конфигурация вступила в силу.

    ./fe/bin/stop_fe.sh
    ./fe/bin/start_fe.sh
  3. Подключитесь из клиента MySQL к Selena через пользователя root. Вам не нужно указывать пароль, когда аутентификация пользователей отключена.

    mysql -h <fe_ip_or_fqdn> -P<fe_query_port> -uroot
  4. Сбросьте пароль для пользователя root.

    SET PASSWORD for root = PASSWORD('xxxxxx');
  5. Повторно включите аутентификацию пользователей, установив элемент конфигурации enable_auth_check в true в файлах конфигурации fe/conf/fe.conf всех узлов FE.

    enable_auth_check = true
  6. Перезапустите все узлы FE, чтобы конфигурация вступила в силу.

    ./fe/bin/stop_fe.sh
    ./fe/bin/start_fe.sh
  7. Подключитесь из клиента MySQL к Selena, используя пользователя root и новый пароль, чтобы проверить, успешно ли сброшен пароль.

    mysql -h <fe_ip_or_fqdn> -P<fe_query_port> -uroot -p<xxxxxx>

Удаление пользователя​

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

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

DROP USER jack@'172.10.1.10';

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

Пользователи с системной ролью 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;

Отзыв роли​

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

ПРИМЕЧАНИЕ

Вы не можете отозвать системную роль по умолчанию 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;

ОСТОРОЖНО

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

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

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

Если вы хотите включить все роли (по умолчанию и предоставленные роли) для всех пользователей Selena при их подключении к кластеру 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;

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

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

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

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

User Privileges

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

User Privileges

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

User Privileges

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

    Пример:

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

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

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

    Пример:

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

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