Управление привилегиями пользователей
В этой статье оп исывается, как управлять пользователями, ролями и привилегиями в 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). Каждое направление бизнеса управляется двумя ролями — аналитиками и руководителями. Аналитики генерируют и анализируют бизнес-отчёты, а руководители запрашивают эти отчёты.

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

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

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