Пользователи базы данных, роли и разрешения

Мы рекомендуем создать в базе данных Glarus BI пользователей с такими ролями:

Объединение ваших разрешений в роли на основе вариантов использования упрощает управление разрешениями в будущем (особенно при использовании мультитенантного доступа). Например, вы можете:

  • использовать ту же самую роль analytics для других BI-инструментов в вашем стеке данных, требующих доступа только для чтения к аналитическим таблицам в вашей базе данных;

  • отменить права записи для glarusbi_model_caching, не затрагивая прав записи glarusbi_actions.

Минимальные разрешения в базе данных

Чтобы пользователь мог просматривать и делать запросы к вашим таблицам в Glarus BI, вы должны дать ему следующие права:

  • CONNECT к вашей базе данных;

  • SELECT ко всем схемам и таблицам, которые вы хотите использовать в Glarus BI.

Чтобы организовать эти разрешения (и упростить обслуживание в дальнейшем):

  1. Создайте в базе данных рольanalytics.

  2. Создайте в базе данных пользователя glarusbi.

  3. Назначьте пользователю glarusbi роль analytics.

  4. Назначьте разрешения роли analytics.

Например, если вы используете базу данных Postgres, войдите с правами администратора и запустите следующие SQL-запросы:

-- Создаем роль "analytics".
CREATE ROLE analytics WITH LOGIN;

-- Добавляем этой роли привилегию CONNECT.
GRANT CONNECT ON DATABASE "your_database" TO analytics;

-- Создаем пользователя базы данных "glarusbi".
CREATE USER glarusbi WITH PASSWORD "your_password";

-- Назначаем роль "analytics" пользователю "glarusbi".
GRANT analytics TO glarusbi;

-- Устанавливаем роли права на выполнение запросов (варианты 1-4):

-- Вариант 1: Раскомментируем строку ниже, чтобы дать пользователям с ролью "analytics" права запрашивать ЛЮБЫЕ ДАННЫЕ (Доступно в Postgres 14 или вышеr. См. [Предопределённые роли](https://www.postgresql.org/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 для использования хранимых процедур или созданных пользователем функций.

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

Назначение всех разрешений (максимальные разрешения) в базе данных

Если вы пока не хотите распределять права в своей базе данных:

  • создайте в базе данных пользователя glarusbi.

  • назначьте пользователю glarusbi все разрешения в базе данных.

-- Создаём пользователя базы данных "glarusbi".
CREATE USER glarusbi WITH PASSWORD "your_password";

-- Даём пользователю все права на чтение и запись в базе данных.
GRANT ALL PRIVILEGES ON "database" TO glarusbi;

Правильным будет использовать локальную базу данных для разработки или тестирования.

Разрешения для выполнения действий

Действия позволяют Glarus BI осуществлять запись в таблицы в вашей базе данных.

В дополнение к минимальным разрешениям в базе данных, вам нужно будет дать права на запись во все таблицы, используемые в действиях:

  1. Создать новую роль под названием glarusbi_actions.

  2. Дать этой роли права на INSERT, UPDATE и DELETE на все таблицы, используемые в действиях Glarus BI.

  3. Назначить роль glarusbi_actions пользователю glarusbi.

-- Создаём роль для объединения разрешений в базе данных для действий Glarus BI.
CREATE ROLE glarusbi_actions WITH LOGIN;

-- Даём права записи в таблицу, используемую в Glarus BI действиях.
GRANT INSERT, UPDATE, DELETE ON "your_table" IN SCHEMA "your_schema" TO glarusbi_actions;

-- Назначаем роль "glarusbi_actions" пользователю "glarusbi".
GRANT glarusbi_actions TO glarusbi;

Разрешения для включения кэширования модели

Кэширование модели позволяет Glarus BI сохранять результаты запроса в определённой схеме в вашей базе данных. Пользователю базы данных Glarus BI потребуется разрешение CREATE для создания выделенной схемы для кэширования модели, а также права на запись (INSERT, UPDATE, DELETE) к этой схеме.

В дополнение к минимальным разрешениям в базе данных:

  1. Создать новую роль под названием glarusbi_model_caching.

  2. Дать этой роли право CREATE в базе данных.

  3. Предоставить этой роли разрешения INSERT, UPDATE и DELETE на схему, используемую для кэширования модели.

  4. Назначить роль glarusbi_model_caching пользователю glarusbi.

-- Создаём роль "glarusbi_model_caching" для объединения разрешений в базе данных для кэширования моделей Glarus BI.
CREATE ROLE glarusbi_model_caching WITH LOGIN;

-- Если вы не хотите предоставлять право на CREATE к вашей базе данных, добавьте схему вручную перед включением кэширования моделей.
GRANT CREATE ON "database" TO glarusbi_model_caching;

-- Даём права на запись схеме, используемой для кэширования моделей.
GRANT USAGE ON "your_schema" TO glarusbi_model_caching;
GRANT INSERT, UPDATE, DELETE ON "your_model's_table" IN SCHEMA "your_schema" TO glarusbi_model_caching;

-- Назначаем роль "glarusbi_model_caching" пользователю "glarusbi".
GRANT glarusbi_model_caching TO glarusbi;

Разрешение загрузок

Вы можете загружать CSV-файлы в поддерживаемые базы данных. Пользователь базы данных Glarus BI должен иметь права на запись (INSERT, UPDATE, DELETE) к схеме, в которой вы хотите хранить загруженные данные.

Сначала вам нужно будет создать схему для хранения загруженных данных (или использовать существующую схему) и сообщить Glarus BI, что вы хотите использовать эту схему для хранения загруженных данных.

В дополнение к минимальным разрешениям в базе данных:

  1. Создайте новую роль glarusbi_uploads.

  2. Предоставьте роли разрешения на INSERT, UPDATE и DELETE в схеме, где вы хотите хранить загруженные данные.

  3. Назначьте роль glarusbi_uploads пользователю glarusbi.

-- Создайте роль, чтобы связать разрешения базы данных для загрузки.
CREATE ROLE glarusbi_uploads WITH LOGIN;

-- Предоставьте права записи для СХЕМЫ, используемой для загрузки.
GRANT USAGE ON "your_schema" TO glarusbi_uploads;
GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA "your_schema" TO glarusbi_uploads;

-- Назначьте роль пользователю glarusbi.
GRANT glarusbi_uploads TO glarusbi;

Разрешения при мультитенантном доступе

Если вы настраиваете мультитенантные разрешения для клиентов, которым необходим доступ к SQL, вы можете создать одно подключение к базе данных для каждого клиента. Это означает, что каждый клиент будет подключаться к базе данных через своего собственного пользователя базы данных.

Предположим, у вас есть клиенты с именами Tangerine и Lemon:

  1. Создайте новых пользователей базы данных glarusbi_tangerine и glarusbi_lemon.

  2. Создайте рольcustomer_facing_analytics с разрешением CONNECT.

  3. Создайте роли для объединения разрешений, специфичных для каждого из клиентских сценариев. Например:

  • tangerine_queries, объединяющую разрешения чтения, чтобы люди могли запрашивать и создавать хранимые процедуры в схеме Tangerine;

  • lemon_queries, объединяющую разрешения чтения, чтобы люди могли запрашивать таблицы в схеме Lemon;

  • lemon_actions, объединяющую разрешения записи, необходимые для создания действий в таблице Lemonade в схеме Lemon.

  1. Назначьте каждому пользователю соответствующие роли.

-- Создаём для каждого клиента отдельного пользователя.
CREATE USER glarusbi_tangerine WITH PASSWORD "orange";
CREATE USER glarusbi_lemon WITH PASSWORD "yellow";

-- Создаём роль, чтобы объединить разрешения для всех клиентов.
CREATE ROLE customer_facing_analytics;
GRANT CONNECT ON DATABASE "citrus" TO customer_facing_analytics;
GRANT customer_facing_analytics TO glarusbi_tangerine, glarusbi_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 glarusbi_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 glarusbi_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 glarusbi_lemon;

Мы рекомендуем объединять разрешения в роли в зависимости от вариантов использования у каждого клиента. Таким образом, вы сможете повторно использовать общие разрешения для разных клиентов, сохраняя при этом возможность предоставлять или отменять отдельные разрешения для каждого из клиентов. Например:

  1. Если клиенту Tangerine необходимо запросить схему Tangerine из другого инструмента аналитики, вы можете использовать роль tangerine_queries при настройке этого инструмента.

  2. Если клиент Lemon решит, что он больше не хочет использовать действия Glarus BI, но по-прежнему хочет задавать вопросы, то вы можете просто отозвать или удалить роль lemon_actions.

Дополнительная информация