СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ
Создает учетные записи пользователей.
Синтаксис:
Клавиша ON CLUSTER
позволяет создавать пользователей на кластере, см. Распределенный DDL.
Идентификация
Существует несколько способов идентификации пользователя:
IDENTIFIED WITH no_password
IDENTIFIED WITH plaintext_password BY 'qwerty'
IDENTIFIED WITH sha256_password BY 'qwerty'
илиIDENTIFIED BY 'password'
IDENTIFIED WITH sha256_hash BY 'hash'
илиIDENTIFIED WITH sha256_hash BY 'hash' SALT 'salt'
IDENTIFIED WITH double_sha1_password BY 'qwerty'
IDENTIFIED WITH double_sha1_hash BY 'hash'
IDENTIFIED WITH bcrypt_password BY 'qwerty'
IDENTIFIED WITH bcrypt_hash BY 'hash'
IDENTIFIED WITH ldap SERVER 'server_name'
IDENTIFIED WITH kerberos
илиIDENTIFIED WITH kerberos REALM 'realm'
IDENTIFIED WITH ssl_certificate CN 'mysite.com:user'
IDENTIFIED WITH ssh_key BY KEY 'public_key' TYPE 'ssh-rsa', KEY 'another_public_key' TYPE 'ssh-ed25519'
IDENTIFIED WITH http SERVER 'http_server'
илиIDENTIFIED WITH http SERVER 'http_server' SCHEME 'basic'
IDENTIFIED BY 'qwerty'
Требования к сложности пароля могут быть отредактированы в config.xml. Ниже представлен пример конфигурации, которая требует, чтобы пароли содержали не менее 12 символов и хотя бы 1 цифру. Каждое правило сложности пароля требует регулярное выражение для сопоставления с паролями и описание правила.
В ClickHouse Cloud по умолчанию, пароли должны соответствовать следующим требованиям сложности:
- Содержать не менее 12 символов
- Содержать хотя бы 1 числовой символ
- Содержать хотя бы 1 заглавный символ
- Содержать хотя бы 1 строчный символ
- Содержать хотя бы 1 специальный символ
Примеры
-
Следующее имя пользователя —
name1
и не требует пароля — что, очевидно, не обеспечивает много безопасности: -
Чтобы указать открытый пароль:
подсказкаПароль хранится в текстовом файле SQL в
/var/lib/clickhouse/access
, поэтому использоватьplaintext_password
не рекомендуется. Попробуйте вместо этогоsha256_password
, как показано далее... -
Наиболее распространенным вариантом является использование пароля, который хешируется с помощью SHA-256. ClickHouse сам хеширует пароль, когда вы указываете
IDENTIFIED WITH sha256_password
. Например:Пользователь
name3
теперь может войти, используяmy_password
, но пароль хранится как хешированное значение выше. Следующий SQL файл был создан в/var/lib/clickhouse/access
и будет выполнен при старте сервера:подсказкаЕсли вы уже создали значение хеша и соответствующее значение соли для имени пользователя, вы можете использовать
IDENTIFIED WITH sha256_hash BY 'hash'
илиIDENTIFIED WITH sha256_hash BY 'hash' SALT 'salt'
. Для идентификации с помощьюsha256_hash
с использованиемSALT
— хеш должен быть вычислен из конкатенации 'password' и 'salt'. -
double_sha1_password
обычно не требуется, но может быть полезным при работе с клиентами, которые этого требуют (например, интерфейс MySQL):ClickHouse генерирует и выполняет следующий запрос:
-
bcrypt_password
— самый безопасный вариант для хранения паролей. Он использует алгоритм bcrypt, который устойчив к атакам грубой силы, даже если хеш пароля скомпрометирован.Длина пароля с этим методом ограничена 72 символами. Параметр рабочего фактора bcrypt, который определяет количество вычислений и времени, необходимого для вычисления хеша и проверки пароля, можно изменить в конфигурации сервера:
Рабочий фактор должен находиться в пределах от 4 до 31, со значением по умолчанию равным 12.
-
Тип пароля также можно опустить:
В этом случае ClickHouse использует тип пароля по умолчанию, указанный в конфигурации сервера:
Доступные типы паролей:
plaintext_password
,sha256_password
,double_sha1_password
. -
Можно указать несколько методов аутентификации:
Примечания:
- Более ранние версии ClickHouse могут не поддерживать синтаксис нескольких методов аутентификации. Поэтому, если сервер ClickHouse содержит таких пользователей и переходит на версию, которая этого не поддерживает, такие пользователи станут недоступными, и некоторые операции, связанные с пользователями, будут нарушены. Для плавного перехода на более раннюю версию все пользователи должны содержать единственный метод аутентификации перед понижением версии. В противном случае, если сервер был понижен без должной процедуры, неисправные пользователи должны быть удалены.
no_password
не может сосуществовать с другими методами аутентификации по соображениям безопасности. Поэтому вы можете указатьno_password
только в том случае, если это единственный метод аутентификации в запросе.
Хост пользователя
Хост пользователя — это хост, с которого можно установить соединение с сервером ClickHouse. Хост можно указать в разделе HOST
запроса следующими способами:
HOST IP 'ip_address_or_subnetwork'
— Пользователь может подключаться к серверу ClickHouse только с указанного IP-адреса или подсети. Примеры:HOST IP '192.168.0.0/16'
,HOST IP '2001:DB8::/32'
. Для использования в производственной среде следует указывать только элементыHOST IP
(IP-адреса и их маски), так как использованиеhost
иhost_regexp
может вызвать дополнительную задержку.HOST ANY
— Пользователь может подключаться из любого места. Это значение по умолчанию.HOST LOCAL
— Пользователь может подключаться только локально.HOST NAME 'fqdn'
— Хост пользователя можно указать как FQDN. Например,HOST NAME 'mysite.com'
.HOST REGEXP 'regexp'
— Вы можете использовать регулярные выражения pcre при указании хостов пользователей. Например,HOST REGEXP '.*\.mysite\.com'
.HOST LIKE 'template'
— Позволяет использовать оператор LIKE для фильтрации хостов пользователей. Например,HOST LIKE '%'
эквивалентенHOST ANY
,HOST LIKE '%.mysite.com'
фильтрует все хосты в доменеmysite.com
.
Другой способ указать хост — использовать синтаксис @
после имени пользователя. Примеры:
СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ mira@'127.0.0.1'
— Эквивалентно синтаксисуHOST IP
.СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ mira@'localhost'
— Эквивалентно синтаксисуHOST LOCAL
.СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ mira@'192.168.%.%'
— Эквивалентно синтаксисуHOST LIKE
.
ClickHouse рассматривает user_name@'address'
как имя пользователя в целом. Таким образом, технически вы можете создать нескольких пользователей с одинаковым user_name
и различными конструкциями после @
. Однако мы не рекомендуем это делать.
Клавиша VALID UNTIL
Позволяет указать дату истечения срока действия и, при необходимости, время для метода аутентификации. Она принимает строку в качестве параметра. Рекомендуется использовать формат YYYY-MM-DD [hh:mm:ss] [timezone]
для даты и времени. По умолчанию этот параметр равен 'infinity'
.
Клавиша VALID UNTIL
может быть указана только вместе с методом аутентификации, за исключением случая, когда в запросе не указан метод аутентификации. В этом сценарии клаузула VALID UNTIL
будет применена ко всем существующим методам аутентификации.
Примеры:
СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ name1 VALID UNTIL '2025-01-01'
СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ name1 VALID UNTIL '2025-01-01 12:00:00 UTC'
СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ name1 VALID UNTIL 'infinity'
СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ name1 VALID UNTIL '2025-01-01 12:00:00 `Asia/Tokyo`'
СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ name1 ИДЕНТИФИЦИРОВАН С помощью plaintext_password BY 'no_expiration', bcrypt_password BY 'expiration_set' VALID UNTIL '2025-01-01'
Клавиша GRANTEES
Указывает пользователей или роли, которым разрешено получать привилегии от этого пользователя при условии, что у этого пользователя также есть все необходимые права, предоставленные с помощью GRANT OPTION. Опции клавиши GRANTEES
:
user
— Указывает пользователя, которому этот пользователь может предоставлять привилегии.role
— Указывает роль, которой этот пользователь может предоставлять привилегии.ANY
— Этот пользователь может предоставлять привилегии кому угодно. Это значение по умолчанию.NONE
— Этот пользователь не может предоставлять привилегии никому.
Вы можете исключить любого пользователя или роль, используя выражение EXCEPT
. Например, СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ user1 GRANTEES ANY EXCEPT user2
. Это означает, что если user1
имеет определенные привилегии, предоставленные с помощью GRANT OPTION
, он сможет предоставить эти привилегии всем, кроме user2
.
Примеры
Создайте учетную запись пользователя mira
, защищенную паролем qwerty
:
mira
должен запустить клиентское приложение на хосте, где работает сервер ClickHouse.
Создайте учетную запись пользователя john
, назначьте ему роли и сделайте эти роли по умолчанию:
Создайте учетную запись пользователя john
и сделайте все его будущие роли по умолчанию:
Когда в будущем какой-либо роли будет назначена роль john
, она автоматически станет ролью по умолчанию.
Создайте учетную запись пользователя john
и сделайте все его будущие роли по умолчанию, за исключением role1
и role2
:
Создайте учетную запись пользователя john
и разрешите ему передавать свои привилегии пользователю с учетной записью jack
: