users в файле конфигурации users.xml содержит настройки пользователей.
ClickHouse также поддерживает рабочий процесс, управляемый через SQL для управления пользователями. Рекомендуем использовать именно его.
users:
user_name/password
Пароль можно указать в открытом виде или в виде SHA256 (в шестнадцатеричном формате).-
Чтобы задать пароль в открытом виде (не рекомендуется), укажите его в элементе
password. Например:<password>qwerty</password>. Пароль можно оставить пустым.
-
Чтобы задать пароль с использованием его хэша SHA256, укажите его в элементе
password_sha256_hex. Например:<password_sha256_hex>65e84be33532fb784c48129675f9eff3a682b27168c0ea744b2cf58ee02337c5</password_sha256_hex>. Пример генерации пароля в оболочке:Первая строка результата — пароль. Вторая строка — соответствующий хэш SHA256.
-
Для совместимости с клиентами MySQL пароль можно указать в виде двойного хэша SHA1. Укажите его в элементе
password_double_sha1_hex. Например:<password_double_sha1_hex>08b4a0f1de6ad37da17359e592c8d74788a83eb0</password_double_sha1_hex>. Пример генерации пароля в оболочке:Первая строка результата — пароль. Вторая строка — соответствующий двойной хэш SHA1.
Конфигурация аутентификации TOTP
Time-Based One-Time Password (TOTP) можно использовать для аутентификации пользователей ClickHouse с помощью временных кодов доступа, действующих ограниченное время. Этот метод аутентификации TOTP соответствует стандарту RFC 6238, поэтому он совместим с популярными TOTP-приложениями, такими как Google Authenticator, 1Password и аналогичными инструментами. Его можно настроить через файл конфигурацииusers.xml в дополнение к аутентификации по паролю.
В управлении доступом через SQL это пока не поддерживается.
Для аутентификации с использованием TOTP пользователь должен указать основной пароль вместе с одноразовым паролем, сгенерированным TOTP-приложением, либо через параметр командной строки --one-time-password, либо добавив его к основному паролю через символ ’+’.
Например, если основной пароль — some_password, а сгенерированный TOTP-код — 345123, пользователь может указать --password some_password+345123 или --password some_password --one-time-password 345123 при подключении к ClickHouse. Если пароль не указан, clickhouse-client запросит его интерактивно.
Каждый код принимается не более одного раза, как требует RFC 6238, поэтому пользователь может успешно пройти аутентификацию не более одного раза за period.
Учитывайте это для клиентов, которые выполняют аутентификацию при каждом запросе или подключении (например, для скриптов, использующих HTTP-интерфейс): для каждой аутентификации требуется новый код.
Чтобы включить аутентификацию TOTP для пользователя, настройте раздел time_based_one_time_password в users.xml. В этом разделе задаются параметры TOTP, такие как секретный ключ, период действия, количество цифр и алгоритм хеширования.
Пример
password или password_sha256_hex) ещё один раздел time_based_one_time_password.
Для генерации QR-кода для секрета TOTP можно использовать утилиту qrencode.
username/ssh-key
Этот параметр позволяет проходить аутентификацию с помощью SSH-ключей. Если у вас есть SSH-ключ (например, созданный с помощьюssh-keygen),
ssh_key будет
ssh-ed25519 на ssh-rsa или ecdsa-sha2-nistp256, если используете другие поддерживаемые алгоритмы.
Несколько методов аутентификации
Для одного пользователя можно настроить несколько методов аутентификации с помощью элемента<auth_methods>. Это позволяет пользователю проходить аутентификацию любым из перечисленных методов — например, у пользователя могут быть и пароль, и учётные данные LDAP, и вход с любым из них будет успешным.
Каждый дочерний элемент <auth_methods> представляет собой произвольно именованную обёртку, содержащую ровно один тип аутентификации. Имя обёртки (например, <method1>, <primary>, <a1>) не имеет значения; используется только вложенный элемент аутентификации.
Пример: несколько паролей
<auth_methods> поддерживаются следующие типы аутентификации:
password— пароль в открытом видеpassword_sha256_hex— хэш пароля SHA256password_scram_sha256_hex— хэш пароля SCRAM-SHA-256password_double_sha1_hex— двойной хэш SHA1 пароляldap— аутентификация через LDAP-серверkerberos— аутентификация Kerberosssl_certificates— аутентификация по SSL-сертификатамssh_keys— аутентификация по SSH-ключамhttp_authentication— HTTP-аутентификация
<auth_methods>нельзя использовать вместе с методами аутентификации, заданными на уровне пользователя. Используйте либо один способ, либо другой, но не оба одновременно.<auth_methods>должен содержать как минимум один метод аутентификации.- Каждый элемент-обертка внутри
<auth_methods>должен содержать ровно один тип аутентификации (за исключением<ssh_keys>, который для обратной совместимости может содержать несколько). - TOTP (
<time_based_one_time_password>) задается на уровне пользователя (вне<auth_methods>) и применяется ко всем методам на основе пароля в списке. Когда TOTP включен, требуется как минимум один метод на основе пароля.
auth_methods с TOTP
<password>), а метод LDAP независимо выполняет аутентификацию через внешний server.
access_management
Этот параметр включает или отключает использование системы управления доступом и учётными записями, управляемой через SQL, для пользователя. Возможные значения:- 0 — Отключено.
- 1 — Включено.
named_collection_control
Эта настройка включает или отключает управление named collections для пользователя. Она соответствует привилегииNAMED COLLECTION ADMIN, за исключением SHOW NAMED COLLECTIONS SECRETS, которая управляется отдельно настройкой show_named_collections_secrets.
named_collection_admin принимается как синоним этой настройки.
Возможные значения:
- 0 — отключено.
- 1 — включено.
show_named_collections_secrets
Эта настройка включает или отключает для пользователя привилегиюSHOW NAMED COLLECTIONS SECRETS, которая позволяет ему видеть значения, хранящиеся в named collections, например в таблице system.named_collections.
По умолчанию она отключена: возможность управлять named collections не означает возможности прочитать уже сохранённые в них учётные данные.
Эта настройка действует только вместе с named_collection_control, поскольку при отключённом named_collection_control все привилегии на named collections, включая SHOW NAMED COLLECTIONS SECRETS, в любом случае отзываются.
Возможные значения:
- 0 — Отключено.
- 1 — Включено.
Пользователь может выдавать только те привилегии, которыми обладает сам, поэтому пользователь, у которого отключена хотя бы одна из настроек Включите все три настройки, чтобы сделать пользователя полноценным администратором.
access_management, named_collection_control и show_named_collections_secrets, не имеет полного набора привилегий и не может передать его кому-либо другому. Например, запрос GRANT ALL ON *.* TO another_user WITH GRANT OPTION будет отклонён для пользователя, у которого включены только access_management и named_collection_control:привилегии
Этот параметр позволяет предоставить выбранному пользователю любые права. Каждый элемент списка должен быть запросомGRANT без указания получателей привилегий.
Пример:
dictionaries, access_management, named_collection_control, show_named_collections_secrets
и allow_databases.
user_name/networks
Список сетей, из которых пользователь может подключаться к серверу ClickHouse. Каждый элемент списка может иметь одну из следующих форм:-
<ip>— IP-адрес или маска сети. Примеры:213.180.204.3,10.0.0.1/8,10.0.0.1/255.255.255.0,2a02:6b8::3,2a02:6b8::3/64,2a02:6b8::3/ffff:ffff:ffff:ffff::. -
<host>— Имя хоста. Пример:example01.host.ru. Для проверки доступа выполняется DNS-запрос, и все возвращённые IP-адреса сравниваются с адресом клиента. -
<host_regexp>— Регулярное выражение для имён хостов. Пример:^example\d\d-\d\d-\d\.host\.ru$Для проверки доступа для адреса клиента выполняется DNS PTR-запрос, после чего применяется указанное регулярное выражение. Затем для результатов PTR-запроса выполняется ещё один DNS-запрос, и все полученные адреса сравниваются с адресом клиента. Настоятельно рекомендуем, чтобы регулярное выражение оканчивалось символом $.
Открывать доступ из любой сети небезопасно, если у вас не настроен должным образом брандмауэр или server не подключен к Интернету напрямую.
user_name/profile
Пользователю можно назначить профиль настроек. Профили настроек задаются в отдельном разделе файлаusers.xml. Подробнее см. в разделе Профили настроек.
user_name/quota
Квоты позволяют отслеживать и ограничивать использование ресурсов за определенный период времени. Квоты настраиваются в разделеquotas
файла конфигурации users.xml.
Вы можете назначить пользователю набор квот. Подробное описание настройки квот см. в разделе Quotas.
user_name/databases
В этом разделе можно ограничить строки, которые ClickHouse возвращает для запросовSELECT, выполняемых текущим пользователем, тем самым реализовав базовую защиту на уровне строк.
Пример
Следующая конфигурация задаёт, что пользователь user1 может видеть в результатах запросов SELECT только строки из table1, в которых значение поля id равно 1000.
filter может быть любым выражением, результатом которого является значение типа UInt8. Обычно оно содержит сравнения и логические операторы. Строки из database_name.table1, для которых результат filter равен 0, не возвращаются этому пользователю. Такая фильтрация несовместима с операциями PREWHERE и отключает оптимизацию WHERE→PREWHERE.
Роли
Вы можете создать любые предопределённые роли в разделеroles файла конфигурации user.xml.
Структура раздела roles:
users: