title: Database users, roles, and privileges

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

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

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

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

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

Минимальные привилегии в базе данных

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

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

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

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

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

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

  • Добавьте пользователя glarusbi в роль analytics.

  • Назначьте привилегии роли 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 осуществлять запись в таблицы в вашей базе данных.

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

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

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

  • Назначить роль 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) к этой схеме.

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

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

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

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

  • Назначить роль 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) к схеме, в которой вы хотите хранить загруженные данные.

You’ll first need to create a schema to store uploads (or use an existing schema) and tell Metabase that you want to use that schema to store uploads.

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

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

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

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

  • Назначьте роль 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:

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

  • Создайте рольcustomer_facing_analytics с привилегией CONNECT.

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

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

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

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

  • Добавьте каждого пользователя в соответствующие им роли.

-- Создаем для каждого клиента отдельного пользователя.
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;

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

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

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

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