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