title: Database users, roles, and privileges¶
Пользователи базы данных, роли и привилегии¶
Мы рекомендуем создать в базе данных Glarus BI пользователей с такими ролями:
analytics
с правами чтения из всех схем и таблиц, используемых в анализе.При необходимости -
glarusbi_actions
с правами на запись в таблицы, использующиеся в действиях Glarus BI.При необходимости -
glarusbi_model_caching
с правами на запись в схему, используемую для кэширования моделей 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 theCONNECT
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
.