CREATE USER
Создает учетные записи пользователей.
Синтаксис:
Предложение ON CLUSTER позволяет создавать пользователей на кластере; см. Distributed 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 символов и содержали как минимум одну цифру. Каждое правило сложности пароля задаётся регулярным выражением для проверки паролей, а также описанием правила.
В ClickHouse Cloud по умолчанию пароли должны соответствовать следующим требованиям к сложности:
- Содержать не менее 12 символов
- Содержать не менее 1 цифры
- Содержать не менее 1 заглавной буквы
- Содержать не менее 1 строчной буквы
- Содержать не менее 1 специального символа
Примеры
-
Следующее имя пользователя —
name1, и для него не требуется пароль, что, очевидно, не обеспечивает особой безопасности: -
Чтобы указать пароль в открытом виде (plaintext):
СоветПароль сохраняется в текстовом SQL-файле в
/var/lib/clickhouse/access, поэтому использованиеplaintext_password— не лучшая идея. Вместо этого попробуйтеsha256_password, как показано далее... -
Наиболее распространённый вариант — использовать пароль, хэшированный с помощью SHA-256. ClickHouse выполнит хеширование пароля, когда вы укажете
IDENTIFIED WITH sha256_password. Например:Пользователь
name3теперь может выполнять вход, используяmy_password, но пароль хранится в виде хэшированного значения, показанного выше. В/var/lib/clickhouse/accessбыл создан следующий SQL-файл, который выполняется при запуске сервера:СоветЕсли вы уже создали хэш-значение и соответствующее значение соли для имени пользователя, вы можете использовать
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 символами.
Параметр work factor алгоритма bcrypt, определяющий объём вычислений и время, необходимые для расчёта хэша и проверки пароля, можно изменить в конфигурации сервера:Значение work factor должно быть от 4 до 31, по умолчанию — 12.
ПримечаниеДля приложений с высокочастотной аутентификацией рассмотрите альтернативные методы аутентификации из-за вычислительных накладных расходов bcrypt при высоких значениях work factor.
-
Тип пароля также можно опустить:
В этом случае 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]. По умолчанию этот параметр имеет значение '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:
Используйте параметр запроса, чтобы создать учетную запись пользователя john: