Пользователи базы данных, роли и разрешения¶
Мы рекомендуем создать пользователя базы данных glarus_bi
со следующими ролями базы данных:
analytics
для доступа на чтение к любым схемам или таблицам, используемым для анализа.- Необязательно
glarus_bi_actions
для доступа на запись к таблицам, используемым для действий Glarus BI. - Необязательно
glarus_bi_model_persistence
для доступа на запись к схеме, используемой для сохранения моделей Glarus BI.
Группирование ваших разрешений в роли на основе сценариев использования упрощает управление разрешениями в будущем (особенно в ситуациях с несколькими арендаторами). Например, вы можете:
- Использовать ту же роль
analytics
для других BI-инструментов в вашем стеке данных ((документация Metabase, англ.)), которым требуется доступ только для чтения к аналитическим таблицам в вашей базе данных. - Отозвать права на запись для
glarus_bi_model_persistence
без влияния на права на запись дляglarus_bi_actions
.
Минимальные разрешения базы данных¶
Чтобы просматривать и запрашивать таблицы в Glarus BI, вам необходимо предоставить пользователю базы данных Glarus BI:
CONNECT
к вашей базе данных.SELECT
для любых схем или таблиц, которые вы хотите использовать в Glarus BI.
Чтобы организовать эти разрешения (и упростить обслуживание в дальнейшем):
- Создайте роль базы данных с названием
analytics
. - Создайте пользователя базы данных с названием
glarus_bi
. - Добавьте
glarus_bi
в рольanalytics
. - Добавьте разрешения к роли
analytics
.
Например, если вы используете базу данных PostgreSQL, вам нужно войти в систему как администратор и выполнить следующие SQL-запросы:
-- Создаём роль с названием "analytics".
CREATE ROLE analytics WITH LOGIN;
-- Добавляем привилегию CONNECT к роли.
GRANT CONNECT ON DATABASE "your_database" TO analytics;
-- Создаём пользователя базы данных с названием "glarus_bi".
CREATE USER glarus_bi WITH PASSWORD "your_password";
-- Даём роль пользователю glarus_bi.
GRANT analytics TO glarus_bi;
-- Добавляем разрешения выполнения запросов к роли (варианты 1-4):
-- Вариант 1: Раскомментируйте строку ниже, чтобы позволить пользователям с ролью analytics запрашивать ВСЕ ДАННЫЕ (В Postgres 14 или выше. Смотрите [Предопределённые роли (документация PostgreSQL)](https://www.postgresql.ru/docs/current/predefined-roles.html#PREDEFINED-ROLES)).
-- GRANT pg_read_all_data TO analytics;
-- Вариант 2: Раскомментируйте строку ниже, чтобы позволить пользователям с ролью analytics запрашивать что угодно в БАЗЕ ДАННЫХ.
-- GRANT USAGE ON DATABASE "your_schema" TO analytics;
-- GRANT SELECT ON DATABASE "your_schema" TO analytics;
-- Вариант 3: Раскомментируйте строку ниже, чтобы позволить пользователям с ролью analytics запрашивать что угодно в определённой СХЕМЕ.
-- GRANT USAGE ON SCHEMA "your_schema" TO analytics;
-- GRANT SELECT ON ALL TABLES IN SCHEMA "your_schema" TO analytics;
-- Вариант 4: Раскомментируйте строку ниже, чтобы позволить пользователям с ролью analytics запрашивать что угодно в определённой ТАБЛИЦЕ.
-- GRANT USAGE ON SCHEMA "your_schema" TO analytics;
-- GRANT SELECT ON "your_table" IN SCHEMA "your_schema" TO analytics;
В зависимости от того, как вы используете Glarus BI, вы также можете дополнительно предоставить:
- Разрешение
TEMPORARY
для создания временных таблиц. - Разрешение
EXECUTE
для использования хранимых процедур или пользовательских функций.
Помните, что когда вы предоставляете разрешения роли, все пользователи с этой ролью получат эти разрешения.
Предоставление всех разрешений базы данных¶
Если вы ещё не хотите структурировать разрешения вашей базы данных:
- Создайте пользователя базы данных
glarus_bi
. - Дайте
glarus_bi
все разрешения к базе данных.
-- Создаём пользователя базы данных с названием "glarus_bi".
CREATE USER glarus_bi WITH PASSWORD "your_password";
-- Даём пользователю права на чтение и запись к чему угодно в базе данных.
GRANT ALL PRIVILEGES ON "database" TO glarus_bi;
Это хороший вариант, если вы подключаетесь к локальной базе данных для разработки или тестирования.
Разрешения для включения действий¶
Действия позволяют Glarus BI записывать данные в определённые таблицы в вашей базе данных.
В дополнение к минимальным разрешениям базы данных, вам нужно предоставить доступ на запись к любым таблицам, используемым с действиями:
- Создайте новую роль с названием
glarus_bi_actions
. - Дайте роли разрешения
INSERT
,UPDATE
иDELETE
для любых таблиц, используемых с действиями Glarus BI. - Дайте роль
glarus_bi_actions
пользователюglarus_bi
.
-- Создаём роль для группировки разрешений базы данных для действий Glarus BI.
CREATE ROLE glarus_bi_actions WITH LOGIN;
-- Предоставляем разрешения на запись к ТАБЛИЦЕ, используемой с действиями Glarus BI.
GRANT INSERT, UPDATE, DELETE ON "your_table" IN SCHEMA "your_schema" TO glarus_bi_actions;
-- Предоставляем роль пользователю glarus_bi.
GRANT glarus_bi_actions TO glarus_bi;
Разрешения для включения сохранения модели¶
Сохранение модели позволяет Glarus BI сохранять результаты запросов в определённой схеме в вашей базе данных. Пользователю базы данных Glarus BI потребуется разрешение CREATE
для настройки выделенной схемы для кэширования моделей, а также доступ на запись (INSERT
, UPDATE
, DELETE
) к этой схеме.
В дополнение к минимальным разрешениям базы данных:
- Создайте новую роль с названием
glarus_bi_model_persistence
. - Дайте роли доступ
CREATE
к базе данных. - Дайте роли разрешения
INSERT
,UPDATE
иDELETE
к схеме, используемой для сохранения моделей. - Дайте роль
glarus_bi_model_persistence
пользователюglarus_bi
.
-- Создаём роль для группировки разрешений базы данных для сохранения моделей Glarus BI.
CREATE ROLE glarus_bi_model_persistence WITH LOGIN;
-- Если вы не хотите давать доступ CREATE к вашей базе данных,
-- добавьте схему вручную перед включением сохранения моделей.
GRANT CREATE ON "database" TO glarus_bi_model_persistence;
-- Предоставляем разрешения на запись к СХЕМЕ, используемой для сохранения моделей.
GRANT USAGE ON "your_schema" TO glarus_bi_model_persistence;
GRANT INSERT, UPDATE, DELETE ON "your_model's_table" IN SCHEMA "your_schema" TO glarus_bi_model_persistence;
-- Предоставляем роль пользователю glarus_bi.
GRANT glarus_bi_model_persistence TO glarus_bi;
Разрешения для включения загрузок¶
Вы можете загружать CSV-файлы в поддерживаемые базы данных. Пользователь базы данных Glarus BI должен иметь доступ на запись (INSERT
, UPDATE
, DELETE
) к схеме, в которой вы хотите хранить загрузки.
Сначала вам нужно создать схему для хранения загрузок (или использовать существующую схему) и указать Glarus BI, что вы хотите использовать эту схему для хранения загрузок.
В дополнение к минимальным разрешениям базы данных:
- Создайте новую роль с названием
glarus_bi_uploads
. - Дайте роли разрешения
INSERT
,UPDATE
иDELETE
к схеме, в которой вы хотите хранить загрузки. - Предоставьте роль
glarus_bi_uploads
пользователюglarus_bi
.
-- Создаём роль для группировки разрешений базы данных для загрузок.
CREATE ROLE glarus_bi_uploads WITH LOGIN;
-- Предоставляем разрешения на запись к СХЕМЕ, используемой для загрузок.
GRANT USAGE ON "your_schema" TO glarus_bi_uploads;
GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA "your_schema" TO glarus_bi_uploads;
-- Предоставляем роль пользователю glarus_bi.
GRANT glarus_bi_uploads TO glarus_bi;
Разрешения при мультитенантном доступе¶
Если вы настраиваете мультитенантные разрешения для клиентов, которым нужен доступ к SQL, вы можете создать одно подключение к базе данных для каждого клиента (документация Metabase, англ.). Это означает, что каждый клиент будет подключаться к базе данных, используя своего собственного пользователя базы данных.
Предположим, у вас есть клиенты с именами Tangerine и Lemon:
- Создайте новых пользователей базы данных
glarus_bi_tangerine
иglarus_bi_lemon
. - Создайте роль
customer_facing_analytics
с привилегиейCONNECT
. - Создайте роли для группировки разрешений, специфичных для сценария использования каждого клиента. Например:
tangerine_queries
для группировки разрешений чтения, чтобы люди могли запрашивать и создавать хранимые процедуры для схемы Tangerine.lemon_queries
для группировки разрешений чтения, чтобы люди могли запрашивать таблицы в схеме Lemon.lemon_actions
для группировки разрешений записи, необходимых для создания действий на таблице Lemonade в схеме Lemon.- Добавьте каждого пользователя в соответствующие роли.
-- Создаём по одному пользователю базы данных для каждого клиента.
CREATE USER glarus_bi_tangerine WITH PASSWORD "orange";
CREATE USER glarus_bi_lemon WITH PASSWORD "yellow";
-- Создаём роль для группировки разрешений для всех клиентов.
CREATE ROLE customer_facing_analytics;
GRANT CONNECT ON DATABASE "citrus" TO customer_facing_analytics;
GRANT customer_facing_analytics TO glarus_bi_tangerine, glarus_bi_lemon;
-- Создаём роль для группировки аналитического доступа на чтение для клиента Tangerine.
CREATE ROLE tangerine_queries;
GRANT USAGE ON SCHEMA "tangerine" TO tangerine_queries;
GRANT SELECT, EXECUTE ON ALL TABLES IN SCHEMA "tangerine" TO tangerine_queries;
GRANT tangerine_queries TO glarus_bi_tangerine;
-- Создаём роль для группировки аналитического доступа на чтение для клиента Lemon.
CREATE ROLE lemon_queries;
GRANT USAGE ON SCHEMA "lemon" TO lemon_queries;
GRANT SELECT ON ALL TABLES IN SCHEMA "lemon" TO lemon_queries;
GRANT lemon_queries TO glarus_bi_lemon;
-- Создаём роль для группировки разрешений для действий Glarus BI для клиента Lemon.
CREATE ROLE lemon_actions;
GRANT INSERT, UPDATE, DELETE ON TABLE "lemonade" IN SCHEMA "lemon" TO lemon_actions;
GRANT lemon_actions TO glarus_bi_lemon;
Мы рекомендуем группировать разрешения в роли на основе сценариев использования для каждого клиента. Таким образом, вы можете повторно использовать общие разрешения для разных клиентов, сохраняя при этом возможность предоставлять или отзывать детальные разрешения для каждого клиента. Например:
- Если клиенту Tangerine нужно запросить схему Tangerine из другого аналитического инструмента, вы можете использовать роль
tangerine_queries
при настройке этого инструмента. - Если клиент Lemon решит, что больше не хочет использовать действия Glarus BI (но всё равно хочет задавать вопросы), вы можете просто отозвать или удалить роль
lemon_actions
.