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