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-3):

-- Вариант 1: Раскомментируем строку ниже, чтобы дать пользователям с ролью "analytics" права на любой запрос в базе данных "your_database".
-- GRANT pg_read_all_data ON DATABASE "your_database" TO analytics;

-- Вариант 2: Раскомментируем строки ниже, чтобы дать пользователям с ролью "analytics" права на любой запрос в схеме "your_schema".
-- GRANT USAGE ON SCHEMA "your_schema" TO analytics;
-- GRANT SELECT ON ALL TABLES IN SCHEMA "your_schema" TO analytics;

-- Вариант 3: Раскомментируем строки ниже, чтобы дать пользователям с ролью "analytics" право на чтение из таблицы "your_table".
-- 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;

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

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

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

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

  • Create a customer_facing_analytics role with the CONNECT privilege.

  • Создайте роль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.

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