CREATE USER
Создает учетные записи пользователей.
Синтаксис:
Клауза ON CLUSTER позволяет создавать пользователей в кластере, см. Распределенные DDL.
Идентификация
Существует несколько способов идентификации пользователей:
IDENTIFIED WITH no_passwordIDENTIFIED 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: