ON CLUSTER позволяет создавать пользователей в кластере, см. Distributed DDL.
Идентификация
IDENTIFIED WITH no_passwordIDENTIFIED WITH plaintext_password BY 'qwerty'IDENTIFIED WITH sha256_password BY 'qwerty'orIDENTIFIED BY 'password'IDENTIFIED WITH sha256_hash BY 'hash'orIDENTIFIED 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 kerberosorIDENTIFIED 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'orIDENTIFIED WITH http SERVER 'http_server' SCHEME 'basic'IDENTIFIED BY 'qwerty'
В ClickHouse Cloud по умолчанию пароли должны соответствовать следующим требованиям к сложности:
- Длина — не менее 12 символов
- Содержать как минимум 1 цифру
- Содержать как минимум 1 заглавную букву
- Содержать как минимум 1 строчную букву
- Содержать как минимум 1 специальный символ
Примеры
-
Следующее имя пользователя —
name1, и для него не требуется пароль, что, очевидно, не дает почти никакой защиты: -
Чтобы указать пароль в открытом виде:
-
Самый распространенный вариант — использовать пароль, хешированный с помощью SHA-256. ClickHouse сам вычислит хеш пароля, если указать
IDENTIFIED WITH sha256_password. Например:Пользовательname3теперь может входить с паролемmy_password, но сам пароль хранится в виде хеша, показанного выше. В/var/lib/clickhouse/accessбудет создан следующий SQL-файл, который выполняется при запуске сервера:
-
double_sha1_passwordобычно не требуется, но бывает полезен при работе с клиентами, которым он нужен (например, через интерфейс MySQL):ClickHouse генерирует и выполняет следующий запрос: -
bcrypt_password— самый безопасный вариант хранения паролей. Он использует алгоритм bcrypt, устойчивый к атакам методом перебора, даже если хеш пароля был скомпрометирован.При использовании этого метода длина пароля ограничена 72 символами. Параметр bcrypt work factor, который определяет объем вычислений и время, необходимые для вычисления хеша и проверки пароля, можно изменить в конфигурации сервера:Значение work factor должно быть в диапазоне от 4 до 31, по умолчанию — 12.
-
Тип пароля также можно не указывать:
В этом случае ClickHouse будет использовать тип пароля по умолчанию, указанный в конфигурации сервера:Доступные типы паролей:
plaintext_password,sha256_password,double_sha1_password. -
Можно указать несколько методов аутентификации:
- Более старые версии ClickHouse могут не поддерживать синтаксис для нескольких методов аутентификации. Поэтому, если на сервере ClickHouse есть такие пользователи, а затем сервер понижают до версии, где эта возможность не поддерживается, такие пользователи станут непригодны к использованию, а некоторые операции, связанные с пользователями, перестанут работать. Чтобы корректно понизить версию, перед этим необходимо настроить всех пользователей так, чтобы у каждого был только один метод аутентификации. Если же версия сервера была понижена без соблюдения этой процедуры, некорректных пользователей следует удалить.
no_passwordне может использоваться вместе с другими методами аутентификации из соображений безопасности. Поэтому указатьno_passwordможно только в том случае, если это единственный метод аутентификации в запросе.
Хост пользователя
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.
предложение 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
GRANTEES:
user— Указывает пользователя, которому этот пользователь может предоставлять привилегии.role— Указывает роль, которой этот пользователь может предоставлять привилегии.ANY— Этот пользователь может предоставлять привилегии кому угодно. Это значение по умолчанию.NONE— Этот пользователь не может предоставлять привилегии никому.
EXCEPT. Например, CREATE USER user1 GRANTEES ANY EXCEPT user2. Это означает, что если пользователю user1 предоставлены какие-либо привилегии с GRANT OPTION, он сможет предоставлять эти привилегии кому угодно, кроме user2.
Примеры
mira, защищенную паролем qwerty:
mira должна запускать клиентское приложение на хосте, где запущен сервер ClickHouse.
Создайте учётную запись пользователя john и назначьте роли:
john, назначьте роли и сделайте некоторые из них ролями по умолчанию:
john и разрешите ему передавать свои привилегии пользователю с учётной записью jack:
john: