Перейти к основному содержанию
Перейти к основному содержанию

Управление пользователями базы данных

В этом руководстве рассматриваются два способа управления пользователями базы данных: через SQL-консоль и непосредственно в самой базе данных.

Аутентификация в SQL-консоли без пароля

Пользователи SQL-консоли создаются для каждого сеанса и аутентифицируются с использованием X.509-сертификатов, которые автоматически обновляются. Пользователь удаляется при завершении сеанса. При формировании списков доступа для аудита перейдите на вкладку Settings для соответствующего сервиса в консоли и учитывайте доступ через SQL-консоль помимо пользователей, уже существующих в базе данных. Если настроены пользовательские роли, доступ пользователя отражается в роли, имя которой оканчивается на имя пользователя.

Пользователи и роли консоли SQL

Базовые роли консоли SQL могут быть назначены пользователям с правами Service Read Only и Service Admin. Для получения дополнительной информации см. раздел Manage SQL Console Role Assignments. В этом руководстве показано, как создать настраиваемую роль для пользователя консоли SQL.

Чтобы создать настраиваемую роль для пользователя консоли SQL и назначить ей общую роль, выполните следующие команды. Адрес электронной почты должен совпадать с адресом электронной почты пользователя в консоли.

Создайте database_developer и выдайте права

Создайте роль database_developer и выдайте права SHOW, CREATE, ALTER и DELETE.

CREATE ROLE OR REPLACE database_developer;
GRANT SHOW ON * TO database_developer;
GRANT CREATE ON * TO database_developer;
GRANT ALTER ON * TO database_developer;
GRANT DELETE ON * TO database_developer;

Создайте роль пользователя консоли SQL

Создайте роль для пользователя консоли SQL my.user@domain.com и назначьте ей роль database_developer.

CREATE ROLE OR REPLACE `sql-console-role:my.user@domain.com`;
GRANT database_developer TO `sql-console-role:my.user@domain.com`;

Пользователю назначается новая роль при использовании консоли SQL

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

Аутентификация в базе данных

Идентификатор пользователя базы данных и пароль

Используйте метод SHA256_hash при создании учетных записей пользователей для защиты паролей. Пароли базы данных ClickHouse должны содержать минимум 12 символов и соответствовать требованиям к сложности: заглавные буквы, строчные буквы, цифры и/или специальные символы.

Безопасная генерация паролей

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

CREATE USER userName IDENTIFIED WITH sha256_hash BY 'hash';

Пользователь базы данных с аутентификацией по SSH

Чтобы настроить аутентификацию по SSH для пользователя базы данных ClickHouse Cloud:

  1. Используйте ssh-keygen для создания пары ключей.
  2. Используйте публичный ключ для создания пользователя.
  3. Назначьте пользователю роли и/или разрешения.
  4. Используйте приватный ключ для аутентификации в сервисе.

Подробное пошаговое руководство с примерами см. в статье How to connect to ClickHouse Cloud using SSH keys в нашей базе знаний.

Права доступа к базе данных

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

RoleDescription
DefaultПолный административный доступ к сервисам
CustomНастройка с использованием SQL-оператора GRANT
  • Роли базы данных являются суммарными. Это означает, что если пользователь является членом двух ролей, он получает наибольший уровень доступа из предоставленных этими двумя ролями. Пользователь не теряет доступ при добавлении ролей.
  • Роли базы данных могут выдаваться другим ролям, формируя иерархическую структуру. Роли наследуют все разрешения тех ролей, членом которых они являются.
  • Роли базы данных уникальны для каждого сервиса и могут применяться к нескольким базам данных в рамках одного и того же сервиса.

Иллюстрация ниже показывает различные способы, которыми пользователю могут быть предоставлены права доступа.

Иллюстрация, показывающая различные способы предоставления прав доступа пользователю

Начальные настройки

В базах данных есть учетная запись с именем default, которая добавляется автоматически и получает default_role при создании сервиса. Пользователю, создающему сервис, отображается автоматически сгенерированный случайный пароль, который назначается учетной записи default при создании сервиса. Пароль не показывается после первоначальной настройки, но может быть изменён в любое время любым пользователем с правами Service Admin в консоли. Эта учетная запись или учетная запись с правами Service Admin в консоли может в любой момент создать дополнительных пользователей и роли базы данных.

Примечание

Чтобы изменить пароль, назначенный учетной записи default в консоли, перейдите в меню Services слева, откройте нужный сервис, перейдите на вкладку Settings и нажмите кнопку Reset password.

Рекомендуется создать новую учетную запись пользователя, связанную с конкретным человеком, и назначить этому пользователю default_role. Это нужно для того, чтобы операции, выполняемые пользователями, были привязаны к их пользовательским идентификаторам, а учетная запись default была зарезервирована для действий типа break-glass (аварийный доступ).

CREATE USER userID IDENTIFIED WITH sha256_hash by 'hashed_password';
GRANT default_role to userID;

Пользователи могут использовать генератор хеша SHA256 или функцию в коде, такую как hashlib в Python, чтобы преобразовать пароль длиной 12+ символов с достаточной сложностью в строку SHA256 и передать её системному администратору в качестве пароля. Это гарантирует, что администратор не видит и не обрабатывает пароли в открытом виде.

Списки доступа к базе данных с пользователями SQL-консоли

Следующий процесс можно использовать для формирования полного списка доступов по SQL-консоли и базам данных в вашей организации.

Получить список всех грантов базы данных

Выполните следующие запросы, чтобы получить список всех грантов в базе данных.

SELECT grants.user_name,
grants.role_name,
users.name AS role_member,
grants.access_type,
grants.database,
grants.table
FROM system.grants LEFT OUTER JOIN system.role_grants ON grants.role_name = role_grants.granted_role_name
LEFT OUTER JOIN system.users ON role_grants.user_name = users.name

UNION ALL

SELECT grants.user_name,
grants.role_name,
role_grants.role_name AS role_member,
grants.access_type,
grants.database,
grants.table
FROM system.role_grants LEFT OUTER JOIN system.grants ON role_grants.granted_role_name = grants.role_name
WHERE role_grants.user_name is null;

Соотнести список грантов с пользователями Console, имеющими доступ к SQL-консоли

Соотнесите этот список с пользователями Console, которые имеют доступ к SQL-консоли.

a. Перейдите в Console.

b. Выберите соответствующий сервис.

c. Выберите Settings слева.

d. Пролистайте до раздела SQL console access.

e. Нажмите на ссылку с числом пользователей, имеющих доступ к базе данных There are # users with access to this service., чтобы просмотреть список пользователей.

Пользователи warehouse

Пользователи warehouse являются общими для всех сервисов в пределах одного и того же warehouse. Для получения дополнительной информации ознакомьтесь с разделом контроль доступа к warehouse.