Перейти к основному содержанию
Создаёт учётные записи пользователей. Синтаксис:
CREATE USER [IF NOT EXISTS | OR REPLACE] name1 [, name2 [,...]] [ON CLUSTER cluster_name]
    [NOT IDENTIFIED | IDENTIFIED {[WITH {plaintext_password | sha256_password | sha256_hash | double_sha1_password | double_sha1_hash}] BY {'password' | 'hash'}} | WITH NO_PASSWORD | {WITH ldap SERVER 'server_name'} | {WITH kerberos [REALM 'realm']} | {WITH ssl_certificate CN 'common_name' | SAN 'TYPE:subject_alt_name'} | {WITH ssh_key BY KEY 'public_key' TYPE 'ssh-rsa|...'} | {WITH http SERVER 'server_name' [SCHEME 'Basic']} [VALID UNTIL datetime] 
    [, {[{plaintext_password | sha256_password | sha256_hash | ...}] BY {'password' | 'hash'}} | {ldap SERVER 'server_name'} | {...} | ... [,...]]]
    [HOST {LOCAL | NAME 'name' | REGEXP 'name_regexp' | IP 'address' | LIKE 'pattern'} [,...] | ANY | NONE]
    [VALID UNTIL datetime]
    [IN access_storage_type]
    [ROLE role [,...]]
    [DEFAULT ROLE role [,...]]
    [DEFAULT DATABASE database | NONE]
    [GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]]
    [SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY | WRITABLE] | PROFILE 'profile_name'] [,...]
Предложение ON CLUSTER позволяет создавать пользователей в кластере, см. Distributed DDL.

Идентификация

Существует несколько способов идентификации пользователя:
  • IDENTIFIED WITH no_password
  • IDENTIFIED WITH plaintext_password BY 'qwerty'
  • IDENTIFIED WITH sha256_password BY 'qwerty' or IDENTIFIED BY 'password'
  • IDENTIFIED WITH sha256_hash BY 'hash' or 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 or 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' or IDENTIFIED WITH http SERVER 'http_server' SCHEME 'basic'
  • IDENTIFIED BY 'qwerty'
Требования к сложности паролей можно изменить в config.xml. Ниже приведен пример конфигурации, в которой требуется, чтобы пароль был длиной не менее 12 символов и содержал 1 цифру. Для каждого правила сложности пароля требуется регулярное выражение для проверки паролей и описание правила.
<clickhouse>
    <password_complexity>
        <rule>
            <pattern>.{12}</pattern>
            <message>be at least 12 characters long</message>
        </rule>
        <rule>
            <pattern>\p{N}</pattern>
            <message>contain at least 1 numeric character</message>
        </rule>
    </password_complexity>
</clickhouse>
В ClickHouse Cloud по умолчанию пароли должны соответствовать следующим требованиям к сложности:
  • Длина — не менее 12 символов
  • Содержать как минимум 1 цифру
  • Содержать как минимум 1 заглавную букву
  • Содержать как минимум 1 строчную букву
  • Содержать как минимум 1 специальный символ

Примеры

  1. Следующее имя пользователя — name1, и для него не требуется пароль, что, очевидно, не дает почти никакой защиты:
    CREATE USER name1 NOT IDENTIFIED
    
  2. Чтобы указать пароль в открытом виде:
    CREATE USER name2 IDENTIFIED WITH plaintext_password BY 'my_password'
    
Пароль хранится в текстовом SQL-файле в /var/lib/clickhouse/access, поэтому использовать plaintext_password — не лучшая идея. Вместо этого лучше использовать sha256_password, как показано ниже…
  1. Самый распространенный вариант — использовать пароль, хешированный с помощью SHA-256. ClickHouse сам вычислит хеш пароля, если указать IDENTIFIED WITH sha256_password. Например:
    CREATE USER name3 IDENTIFIED WITH sha256_password BY 'my_password'
    
    Пользователь name3 теперь может входить с паролем my_password, но сам пароль хранится в виде хеша, показанного выше. В /var/lib/clickhouse/access будет создан следующий SQL-файл, который выполняется при запуске сервера:
    /var/lib/clickhouse/access $ cat 3843f510-6ebd-a52d-72ac-e021686d8a93.sql
    ATTACH USER name3 IDENTIFIED WITH sha256_hash BY '0C268556C1680BEF0640AAC1E7187566704208398DA31F03D18C74F5C5BE5053' SALT '4FB16307F5E10048196966DD7E6876AE53DE6A1D1F625488482C75F14A5097C7';
    
Если у вас уже есть хеш-значение и соответствующее значение соли для имени пользователя, можно использовать IDENTIFIED WITH sha256_hash BY 'hash' или IDENTIFIED WITH sha256_hash BY 'hash' SALT 'salt'. При идентификации с помощью sha256_hash и SALT хеш должен вычисляться из конкатенации ‘password’ и ‘salt’.
  1. double_sha1_password обычно не требуется, но бывает полезен при работе с клиентами, которым он нужен (например, через интерфейс MySQL):
    CREATE USER name4 IDENTIFIED WITH double_sha1_password BY 'my_password'
    
    ClickHouse генерирует и выполняет следующий запрос:
    CREATE USER name4 IDENTIFIED WITH double_sha1_hash BY 'CCD3A959D6A004B9C3807B728BC2E55B67E10518'
    
  2. bcrypt_password — самый безопасный вариант хранения паролей. Он использует алгоритм bcrypt, устойчивый к атакам методом перебора, даже если хеш пароля был скомпрометирован.
    CREATE USER name5 IDENTIFIED WITH bcrypt_password BY 'my_password'
    
    При использовании этого метода длина пароля ограничена 72 символами. Параметр bcrypt work factor, который определяет объем вычислений и время, необходимые для вычисления хеша и проверки пароля, можно изменить в конфигурации сервера:
    <bcrypt_workfactor>12</bcrypt_workfactor>
    
    Значение work factor должно быть в диапазоне от 4 до 31, по умолчанию — 12.
Для приложений с высокочастотной аутентификацией рассмотрите альтернативные методы аутентификации из-за вычислительных затрат bcrypt при более высоких значениях work factor.
  1. Тип пароля также можно не указывать:
    CREATE USER name6 IDENTIFIED BY 'my_password'
    
    В этом случае ClickHouse будет использовать тип пароля по умолчанию, указанный в конфигурации сервера:
    <default_password_type>sha256_password</default_password_type>
    
    Доступные типы паролей: plaintext_password, sha256_password, double_sha1_password.
  2. Можно указать несколько методов аутентификации:
    CREATE USER user1 IDENTIFIED WITH plaintext_password by '1', bcrypt_password by '2', plaintext_password by '3''
    
Примечания:
  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.
Ещё один способ указать хост — использовать синтаксис @ после имени пользователя. Примеры:
  • 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], где [timezone] должен быть числовым смещением, например +09:00, или одним из значений UTC, GMT, Z, MSK, MSD; именованные зоны IANA, такие как Asia/Tokyo, не распознаются (см. примечание ниже). По умолчанию значение этого параметра — '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 '2025-01-01 12:00:00 +09:00'
  • CREATE USER name1 VALID UNTIL 'infinity'
  • CREATE USER name1 IDENTIFIED WITH plaintext_password BY 'no_expiration', bcrypt_password BY 'expiration_set' VALID UNTIL '2025-01-01'
Строка даты и времени разбирается функцией parseDateTimeBestEffort, которая распознаёт только токены часового пояса UTC, GMT, Z, MSK, MSD и числовые смещения, такие как +09:00 или -05:00. Именованные часовые пояса IANA, такие как Asia/Tokyo или Europe/London, не поддерживаются, а фиксированное смещение не эквивалентно зоне IANA для регионов, где действует переход на летнее время, поэтому для конкретной даты нужно вычислить правильное смещение.

Предложение GRANTEES

Указывает пользователей или роли, которым этот пользователь может предоставлять привилегии, при условии, что самому этому пользователю также предоставлены все необходимые права доступа с GRANT OPTION. Варианты предложения GRANTEES:
  • user — Указывает пользователя, которому этот пользователь может предоставлять привилегии.
  • role — Указывает роль, которой этот пользователь может предоставлять привилегии.
  • ANY — Этот пользователь может предоставлять привилегии кому угодно. Это значение по умолчанию.
  • NONE — Этот пользователь не может предоставлять привилегии никому.
Исключить любого пользователя или роль можно с помощью выражения EXCEPT. Например, CREATE USER user1 GRANTEES ANY EXCEPT user2. Это означает, что если пользователю user1 предоставлены какие-либо привилегии с GRANT OPTION, он сможет предоставлять эти привилегии кому угодно, кроме user2.

Примеры

Создайте пользовательскую учетную запись mira, защищенную паролем qwerty:
CREATE USER mira HOST IP '127.0.0.1' IDENTIFIED WITH sha256_password BY 'qwerty';
mira должна запускать клиентское приложение на хосте, где запущен сервер ClickHouse. Создайте учётную запись пользователя john и назначьте роли:
CREATE USER john ROLE role1, role2;
Создайте учетную запись пользователя john, назначьте роли и сделайте некоторые из них ролями по умолчанию:
CREATE USER john ROLE role1, role2 DEFAULT ROLE role1;
или
CREATE USER john ROLE role1, role2 DEFAULT ROLE ALL EXCEPT role2;
Создайте учётную запись пользователя john и разрешите ему передавать свои привилегии пользователю с учётной записью jack:
CREATE USER john GRANTEES jack;
Используйте параметр запроса, чтобы создать учётную запись пользователя john:
SET param_user=john;
CREATE USER {user:Identifier};
Последнее изменение 10 июня 2026 г.