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-адреса или подсети subnetwork. Примеры: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]
для даты и времени. По умолчанию этот параметр равен '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
: