Перейти к основному содержимому
Перейти к основному содержимому

СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ

Создает учетные записи пользователей.

Синтаксис:

Клавиша 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 специальный символ

Примеры

  1. Следующее имя пользователя — name1 и не требует пароля — что, очевидно, не обеспечивает много безопасности:

  2. Чтобы указать открытый пароль:

    подсказка

    Пароль хранится в текстовом файле SQL в /var/lib/clickhouse/access, поэтому использовать plaintext_password не рекомендуется. Попробуйте вместо этого sha256_password, как показано далее...

  3. Наиболее распространенным вариантом является использование пароля, который хешируется с помощью 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'.

  4. double_sha1_password обычно не требуется, но может быть полезным при работе с клиентами, которые этого требуют (например, интерфейс MySQL):

    ClickHouse генерирует и выполняет следующий запрос:

  5. bcrypt_password — самый безопасный вариант для хранения паролей. Он использует алгоритм bcrypt, который устойчив к атакам грубой силы, даже если хеш пароля скомпрометирован.

    Длина пароля с этим методом ограничена 72 символами. Параметр рабочего фактора bcrypt, который определяет количество вычислений и времени, необходимого для вычисления хеша и проверки пароля, можно изменить в конфигурации сервера:

    Рабочий фактор должен находиться в пределах от 4 до 31, со значением по умолчанию равным 12.

  6. Тип пароля также можно опустить:

    В этом случае ClickHouse использует тип пароля по умолчанию, указанный в конфигурации сервера:

    Доступные типы паролей: plaintext_password, sha256_password, double_sha1_password.

  7. Можно указать несколько методов аутентификации:

Примечания:

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