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.
Для приложений с частой аутентификацией, рассмотрите альтернативные методы аутентификации из-за вычислительных затрат bcrypt при более высоких рабочих нагрузках.
- Тип пароля также можно опустить:
В этом случае 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
: