CREATE USER
Создает учетные записи пользователей.
Синтаксис:
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
.
Другой способ указания хоста — использовать синтаксис @
, следующий за именем пользователя. Примеры:
CREATE USER mira@'127.0.0.1'
— Эквивалентно синтаксисуHOST IP
.CREATE USER mira@'localhost'
— Эквивалентно синтаксисуHOST LOCAL
.CREATE USER mira@'192.168.%.%'
— Эквивалентно синтаксисуHOST LIKE
.
ClickHouse рассматривает user_name@'address'
как полное имя пользователя. Таким образом, технически вы можете создать несколько пользователей с одинаковым user_name
и разными конструкциями после @
. Однако мы не рекомендуем это делать.
Условие VALID UNTIL
Позволяет указать дату истечения срока действия и, опционально, время для метода аутентификации. Он принимает строку в качестве параметра. Рекомендуется использовать формат YYYY-MM-DD [hh:mm:ss] [timezone]
для datetime. По умолчанию этот параметр равен 'infinity'
.
Условие VALID UNTIL
можно указать только вместе с методом аутентификации, за исключением случая, когда в запросе не указан метод аутентификации. В этом случае условие VALID UNTIL
будет применяться ко всем существующим методам аутентификации.
Примеры:
CREATE USER name1 VALID UNTIL '2025-01-01'
CREATE USER name1 VALID UNTIL '2025-01-01 12:00:00 UTC'
CREATE USER name1 VALID UNTIL 'infinity'
CREATE USER name1 VALID UNTIL '2025-01-01 12:00:00 `Asia/Tokyo`'
CREATE USER name1 IDENTIFIED WITH plaintext_password BY 'no_expiration', bcrypt_password BY 'expiration_set' VALID UNTIL '2025-01-01''
Условие GRANTEES
Указывает пользователей или роли, которым разрешено получать привилегии от этого пользователя при условии, что у этого пользователя также есть все необходимые разрешения, предоставленные с помощью GRANT OPTION. Опции условия GRANTEES
:
user
— Указывает пользователя, которому этот пользователь может предоставлять привилегии.role
— Указывает роль, которой этот пользователь может предоставлять привилегии.ANY
— Этот пользователь может предоставлять привилегии любому. Это установка по умолчанию.NONE
— Этот пользователь не может предоставлять привилегии никому.
Вы можете исключить любого пользователя или роль, используя выражение EXCEPT
. Например, CREATE USER user1 GRANTEES ANY EXCEPT user2
. Это означает, что если user1
имеет некоторые привилегии, предоставленные с помощью GRANT OPTION
, он сможет предоставить эти привилегии любому, кроме user2
.
Примеры
Создать учетную запись пользователя mira
, защищенную паролем qwerty
:
mira
должен запустить клиентское приложение на хосте, где работает сервер ClickHouse.
Создать учетную запись пользователя john
, назначить ему роли и сделать эти роли по умолчанию:
Создать учетную запись пользователя john
и сделать все его будущие роли по умолчанию:
Когда в будущем какой-либо роли будет назначена роль john
, она автоматически станет по умолчанию.
Создать учетную запись пользователя john
и сделать все его будущие роли по умолчанию, исключая role1
и role2
:
Создать учетную запись пользователя john
и разрешить ему предоставлять свои привилегии пользователю с учетной записью jack
: