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

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

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