Создание учетных записей пользователей в ClickHouse
Создание учетных записей в ClickHouse выполняется через SQL-запрос и доступно, если при запуске контейнера передать переменную окружения:
APP_USER_ACCESS_MANAGEMENT='1'
Запрос:
CREATE USER [IF NOT EXISTS | OR REPLACE] name1 [ON CLUSTER cluster_name1]
[, name2 [ON CLUSTER cluster_name2] ...]
[NOT IDENTIFIED | IDENTIFIED {[WITH {no_password | plaintext_password | sha256_password | sha256_hash | double_sha1_password | double_sha1_hash}] BY {'password' | 'hash'}} | {WITH ldap SERVER 'server_name'} | {WITH kerberos [REALM 'realm']}]
[HOST {LOCAL | NAME 'name' | REGEXP 'name_regexp' | IP 'address' | LIKE 'pattern'} [,...] | ANY | NONE]
[DEFAULT ROLE role [,...]]
[DEFAULT DATABASE database | NONE]
[GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]]
[SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY | WRITABLE] | PROFILE 'profile_name'] [,...]
Где:
ON CLUSTER
— создание пользователей в кластере.
Идентификация пользователей
Для идентификации пользователей существуют следующие способы:
IDENTIFIED WITH no_password
IDENTIFIED WITH plaintext_password BY 'qwerty'
IDENTIFIED WITH sha256_password BY 'qwerty' or IDENTIFIED BY 'password'
IDENTIFIED WITH sha256_hash BY 'hash' or IDENTIFIED WITH sha256_hash BY 'hash' SALT 'salt'
IDENTIFIED WITH double_sha1_password BY 'qwerty'
IDENTIFIED WITH double_sha1_hash BY 'hash'
IDENTIFIED WITH ldap SERVER 'server_name'
IDENTIFIED WITH kerberos or IDENTIFIED WITH kerberos REALM 'realm'
Для идентификации с sha256_hash
используйте SALT
— хэш должен быть вычислен от конкатенации 'password'
и 'salt'
.
Секция GRANTEES
Указываются пользователи или роли, которым разрешено получать привилегии от создаваемого пользователя при условии, что этому пользователю также предоставлен весь необходимый доступ с использованием GRANT OPTION
. Параметры секции GRANTEES
:
user
— указывается пользователь, которому разрешено получать привилегии от создаваемого пользователяrole
— указывается роль, которой разрешено получать привилегии от создаваемого пользователяANY
— любому пользователю или любой роли разрешено получать привилегии от создаваемого пользователя. Используется по умолчаниюNONE
— никому не разрешено получать привилегии от создаваемого пользователя
Вы можете исключить любого пользователя или роль, используя выражение EXCEPT
. Например, CREATE USER user1 GRANTEES ANY EXCEPT user2
. Это означает, что, если user1
имеет привилегии, предоставленные с использованием GRANT OPTION
, он сможет предоставить их любому, кроме user2
.
Выражение GRANT
Присваивает привилегии пользователям или ролям ClickHouse. Назначает роли пользователям или другим ролям.
Отозвать привилегию можно с помощью выражения REVOKE
. Чтобы вывести список присвоенных привилегий, воспользуйтесь выражением SHOW GRANTS
.
Синтаксис присвоения привилегий:
GRANT [ON CLUSTER cluster_name] privilege[(column_name [,...])] [,...] ON {db.table|db.*|*.*|table|*} TO {user | role | CURRENT_USER} [,...] [WITH GRANT OPTION] [WITH REPLACE OPTION]
privilege
— тип привилегииrole
— роль пользователя ClickHouseuser
— пользователь ClickHouse
WITH GRANT OPTION
разрешает пользователю или роли выполнять запрос GRANT
. Пользователь может выдавать только те привилегии, которые есть у него, той же или меньшей области действий. WITH REPLACE OPTION
заменяет все старые привилегии новыми привилегиями для user
или role
, если не указано, добавляет новые привилегии.
Синтаксис назначения ролей:
GRANT [ON CLUSTER cluster_name] role [,...] TO {user | another_role | CURRENT_USER} [,...] [WITH ADMIN OPTION] [WITH REPLACE OPTION]
role
— роль пользователя ClickHouseuser
— пользователь ClickHouse
WITH ADMIN OPTION
присваивает привилегию ADMIN OPTION
пользователю или роли. WITH REPLACE OPTION
заменяет все старые роли новыми ролями для пользователя user
или role
, если не указано, добавляет новые роли.
Синтаксис присвоения текущих привилегий:
GRANT CURRENT GRANTS{(privilege[(column_name [,...])] [,...] ON {db.table|db.*|*.*|table|*}) | ON {db.table|db.*|*.*|table|*}} TO {user | role | CURRENT_USER} [,...] [WITH GRANT OPTION] [WITH REPLACE OPTION]
privilege
— тип привилегииrole
— роль пользователя ClickHouseuser
— пользователь ClickHouse
Использование выражения CURRENT GRANTS
позволяет присвоить все указанные и доступные для присвоения привилегии. Если список привилегий не задан, то указанный пользователь или роль получат все доступные привилегии для CURRENT_USER
.
Привилегии
Привилегия — это разрешение на выполнение определенного типа запросов.
Привилегии имеют иерархическую структуру. Набор разрешенных запросов зависит от области действия привилегии. С полным списком привилегий ClickHouse ознакомьтесь по ссылке.
Примеры
Создать аккаунт mira, защищенный паролем qwerty:
CREATE USER mira IDENTIFIED WITH sha256_password BY 'qwerty';
Пользователь mira должен запустить клиентское приложение на хосте, где запущен ClickHouse.
Создать аккаунт john, назначить на него роли, сделать данные роли ролями по умолчанию:
CREATE USER john DEFAULT ROLE role1, role2;
Создать аккаунт john и установить ролями по умолчанию все его будущие роли:
CREATE USER john DEFAULT ROLE ALL;
Когда роль будет назначена аккаунту john, она автоматически станет ролью по умолчанию.
Создать аккаунт john и установить ролями по умолчанию все его будущие роли, кроме role1 и role2:
CREATE USER john DEFAULT ROLE ALL EXCEPT role1, role2;
Создать пользователя с аккаунтом john и разрешить ему предоставить свои привилегии пользователю с аккаунтом jack:
CREATE USER john GRANTEES jack;
Управление доступом
ClickHouse поддерживает управление доступом на основе ролей.
Объекты системы доступа в ClickHouse:
- аккаунт пользователя
- роль
- политика доступа к строкам
- профиль настроек
- квота
Вы можете настроить объекты системы доступа, используя:
- функцию SQL-ориентированного управления доступом
- конфигурационные файлы сервера: users.xml и config.xml
Рекомендуется использовать функцию SQL-ориентированного управления доступом. Оба метода конфигурации работают одновременно, поэтому, если для управления доступом вы используете конфигурационные файлы, вы можете плавно перейти на SQL-ориентированное управление доступом.
Недопустимо одновременно использовать оба метода для управления одним и тем же объектом системы доступа.
Использование
По умолчанию сервер ClickHouse предоставляет аккаунт пользователя default, для которого выключена функция SQL-ориентированного управления доступом, но у него есть все права и разрешения. Аккаунт default используется во всех случаях, когда имя пользователя не определено. Например, при входе с клиента или в распределенных запросах. При распределенной обработке запроса default используется, если в конфигурации сервера или кластера не указаны свойства user и password.
Если вы начали пользоваться ClickHouse недавно, попробуйте следующий сценарий:
- Включите SQL-ориентированное управление доступом для пользователя default.
- Войдите под пользователем default и создайте всех необходимых пользователей. Не забудьте создать аккаунт администратора (
GRANT ALL ON *.* TO admin_user_account WITH GRANT OPTION
). - Ограничьте разрешения для пользователя default и отключите для него SQL-ориентированное управление доступом.
- Вы можете выдавать разрешения на базы данных или таблицы, даже если они не существуют.
- При удалении таблицы все связанные с ней привилегии не отзываются. Если затем создать новую таблицу с таким же именем, все привилегии останутся действительными. Чтобы отозвать привилегии, связанные с удаленной таблицей, необходимо выполнить, например, запрос
REVOKE ALL PRIVILEGES ON db.table FROM ALL
. - У привилегий нет настроек времени жизни.
Аккаунт пользователя
Аккаунт пользователя — это объект системы доступа, позволяющий авторизовать кого-либо в ClickHouse. Аккаунт содержит:
- идентификационную информацию
- привилегии, определяющие область действия запросов, которые могут быть выполнены пользователем
- хосты, которые могут подключаться к серверу ClickHouse
- назначенные роли и роли по умолчанию
- настройки и их ограничения, которые применяются по умолчанию при входе пользователя
- присвоенные профили настроек
Привилегии присваиваются аккаунту пользователя с помощью запроса GRANT или через назначение ролей. Отозвать привилегию можно с помощью запроса REVOKE
. Чтобы вывести список присвоенных привилегий, используется выражение SHOW GRANTS
.
Запросы управления:
CREATE USER
ALTER USER
DROP USER
SHOW CREATE USER
Применение настроек
Настройки могут быть заданы разными способами: для аккаунта пользователя, для назначенных ему ролей или в профилях настроек. При входе пользователя, если настройка задана для разных объектов системы доступа, значение настройки и ее ограничения применяются в следующем порядке (от высшего приоритета к низшему):
- Настройки аккаунта.
- Настройки ролей по умолчанию для аккаунта. Если настройка задана для нескольких ролей, порядок применения не определен.
- Настройки из профилей настроек, присвоенных пользователю или его ролям по умолчанию. Если настройка задана в нескольких профилях, порядок применения не определен.
- Настройки, которые по умолчанию применяются ко всему серверу, или настройки из профиля по умолчанию.
Роль
Роль — это контейнер объектов системы доступа, которые можно присвоить аккаунту пользователя.
Роль содержит:
- привилегии
- настройки и ограничения
- список назначенных ролей
Запросы управления:
CREATE ROLE
ALTER ROLE
DROP ROLE
SET ROLE
SET DEFAULT ROLE
SHOW CREATE ROLE
Привилегии можно присвоить роли с помощью запроса GRANT
. Для отзыва привилегий у роли ClickHouse предоставляет запрос REVOKE
.
За полной документацией обращайтесь на официальный сайт ClickHouse.
Была ли статья полезна?