--- title: Database users, roles, and privileges --- # Пользователи базы данных, роли и привилегии Мы рекомендуем создать в базе данных Glarus BI пользователей с такими ролями: - [`analytics` с правами чтения](#minimum-database-privileges) из всех схем и таблиц, используемых в анализе. - При необходимости - [`glarusbi_actions` с правами на запись](#privileges-to-enable-actions) в таблицы, использующиеся в действиях Glarus BI. - При необходимости - [`glarusbi_model_caching` с правами на запись](#privileges-to-enable-model-caching) в схему, используемую для кэширования моделей Glarus BI. Объединение ваших привилегий в роли на основе вариантов использования упрощает управление привилегиями в будущем (особенно при использовании [мультитенантного доступа](#multi-tenant-permissions)). Например, вы можете: - Использовать ту же самую роль `analytics` для других BI-инструментов в вашем [стеке данных](https://www.metabase.com/learn/databases/data-landscape#data-analysis-layer), требующих доступа только для чтения к аналитическим таблицам в вашей базе данных. - Отменить права записи для `glarusbi_model_caching`, не затрагивая прав записи `glarusbi_actions`. ## Минимальные привилегии в базе данных Чтобы пользователь мог просматривать и делать запросы к вашим таблицам в Glarus BI, вы должны дать ему следующие права: - На `CONNECT` к вашей базе данных. - На `SELECT` ко всем схемам и таблицам, которые вы хотите использовать в Glarus BI. Чтобы организовать эти привилегии (и упростить обслуживание в дальнейшем): - Создайте в базе данных роль`analytics`. - Создайте в базе данных пользователя `glarusbi`. - Добавьте пользователя `glarusbi` в роль `analytics`. - Назначьте привилегии роли `analytics`. Например, если вы используете базу данных Postgres, войдите с правами администратора и запустите следующие SQL-запросы: ```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` все привилегии в базе данных. ```sql -- Создаем пользователя базы данных "glarusbi". CREATE USER glarusbi WITH PASSWORD "your_password"; -- Даём пользователю все права на чтение и запись в базе данных. GRANT ALL PRIVILEGES ON "database" TO glarusbi; ``` Правильным будет использовать локальную базу данных для разработки или тестирования. ## Привилегии для выполнения действий [Действия](../actions/introduction.md) позволяют Glarus BI осуществлять запись в таблицы в вашей базе данных. В дополнение к [минимальным привилегиям в базе данных](#minimum-database-privileges), вам нужно будет дать права на запись во все таблицы, используемые в действиях: - Создать новую роль под названием `glarusbi_actions`. - Дать этой роли права на `INSERT`, `UPDATE` и `DELETE` на все таблицы, используемые в действиях Glarus BI. - Назначить роль `glarusbi_actions` пользователю `glarusbi`. ```sql -- Создаем роль для объединения привилегий в базе данных для 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; ``` ## Привилегии для включения кеширования модели [Кэширование модели](../data-modeling/models.md#model-caching) позволяет Glarus BI сохранять результаты запроса в определенной схеме в вашей базе данных. Пользователю базы данных Glarus BI потребуется привилегия `CREATE` для создания выделенной схемы для кэширования модели, а также права на запись (`INSERT`, `UPDATE`, `DELETE`) к этой схеме. В дополнение к [минимальным привилегиям в базе данных](#minimum-database-privileges): - Создать новую роль под названием `glarusbi_model_caching`. - Дать этой роли право `CREATE` в базе данных. - Предоставить этой роли привилегии `INSERT`, `UPDATE` и `DELETE` на схему, используемую для кэширования модели. - Назначить роль `glarusbi_model_caching` пользователю`glarusbi`. ```sql -- Создаем роль "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, вы можете [создать одно подключение к базе данных для каждого клиента](https://www.metabase.com/learn/permissions/multi-tenant-permissions#granting-customers-native-sql-access-to-their-schema). Это означает, что каждый клиент будет подключаться к базе данных через своего собственного пользователя базы данных. Предположим, у вас есть клиенты с именами 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`, объединяющую привилегии записи, необходимые для создания [действий](#privileges-to-enable-actions) в таблице Lemonade в схеме Lemon. - Добавьте каждого пользователя в соответствующие им роли. ```sql -- Создаем для каждого клиента отдельного пользователя. 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`. ## Дополнительная информация - [Стратегии разрешений](https://www.metabase.com/learn/permissions/strategy) - [Введение в разрешения](../permissions/introduction.md) - [Обзор пользователей](../people-and-groups/start.md)