СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ
Создает учетные записи пользователей.
Синтаксис:
Клавиша 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-адреса или подсети. Примеры: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: