LDAP
Эта страница не относится к ClickHouse Cloud. Описанная здесь функция недоступна в услугах ClickHouse Cloud. См. руководство ClickHouse Совместимость с ClickHouse Cloud для получения дополнительной информации.
Сервер LDAP можно использовать для аутентификации пользователей ClickHouse. Для этого есть два подхода:
- Использовать LDAP в качестве внешнего аутентификатора для существующих пользователей, которые определены в
users.xmlили в локальных путях управления доступом. - Использовать LDAP в качестве внешнего пользовательского каталога и разрешить аутентификацию локально не определённых пользователей, если они существуют на сервере LDAP.
В обоих этих случаях в конфигурации ClickHouse должен быть определён сервер LDAP с внутренним именем, чтобы на него можно было ссылаться из других частей конфигурации.
Определение сервера LDAP
Чтобы задать сервер LDAP, необходимо добавить раздел ldap_servers в файл config.xml.
Пример
Обратите внимание, что в секции ldap_servers можно указать несколько LDAP-серверов с разными именами.
Параметры
host— имя хоста или IP‑адрес LDAP‑сервера, этот параметр обязателен и не может быть пустым.port— порт LDAP‑сервера, по умолчанию636, еслиenable_tlsимеет значениеtrue, иначе389.bind_dn— шаблон, используемый для формирования DN для привязки (bind).- Итоговый DN будет сформирован путем замены всех подстрок
{user_name}в шаблоне на фактическое имя пользователя при каждой попытке аутентификации.
- Итоговый DN будет сформирован путем замены всех подстрок
user_dn_detection— раздел с параметрами поиска в LDAP для определения фактического DN пользователя, к которому выполнена привязка.- В основном используется в фильтрах поиска для последующего сопоставления ролей, когда сервером является Active Directory. Полученный DN пользователя будет использоваться при замене подстрок
{user_dn}везде, где это разрешено. По умолчанию DN пользователя устанавливается равным bind DN, но после выполнения поиска он будет обновлен фактическим обнаруженным значением DN пользователя.base_dn— шаблон, используемый для формирования базового DN для поиска в LDAP.- Итоговый DN будет сформирован путем замены всех подстрок
{user_name}и{bind_dn}в шаблоне на фактическое имя пользователя и bind DN во время поиска в LDAP.
- Итоговый DN будет сформирован путем замены всех подстрок
scope— область поиска в LDAP.- Допустимые значения:
base,one_level,children,subtree(значение по умолчанию).
- Допустимые значения:
search_filter— шаблон, используемый для формирования фильтра поиска в LDAP.- Итоговый фильтр будет сформирован путем замены всех подстрок
{user_name},{bind_dn}и{base_dn}в шаблоне на фактическое имя пользователя, bind DN и base DN во время поиска в LDAP. - Обратите внимание, что специальные символы должны быть корректно экранированы в XML.
- Итоговый фильтр будет сформирован путем замены всех подстрок
- В основном используется в фильтрах поиска для последующего сопоставления ролей, когда сервером является Active Directory. Полученный DN пользователя будет использоваться при замене подстрок
verification_cooldown— период времени в секундах после успешной попытки привязки, в течение которого пользователь считается успешно аутентифицированным для всех последующих запросов без обращения к LDAP‑серверу.- Укажите
0(значение по умолчанию), чтобы отключить кеширование и принудительно обращаться к LDAP‑серверу для каждого запроса аутентификации.
- Укажите
enable_tls— флаг, включающий использование защищенного соединения с LDAP‑сервером.- Укажите
noдля незашифрованного протоколаldap://(не рекомендуется). - Укажите
yesдля протокола LDAP поверх SSL/TLSldaps://(рекомендуется, используется по умолчанию). - Укажите
starttlsдля устаревшего протокола StartTLS (незашифрованный протоколldap://, повышаемый до TLS).
- Укажите
tls_minimum_protocol_version— минимальная версия протокола SSL/TLS.- Допустимые значения:
ssl2,ssl3,tls1.0,tls1.1,tls1.2(значение по умолчанию).
- Допустимые значения:
tls_require_cert— способ проверки сертификата удаленного узла (peer) SSL/TLS.- Допустимые значения:
never,allow,try,demand(значение по умолчанию).
- Допустимые значения:
tls_cert_file— путь к файлу сертификата.tls_key_file— путь к файлу ключа сертификата.tls_ca_cert_file— путь к файлу сертификата CA.tls_ca_cert_dir— путь к каталогу, содержащему сертификаты CA.tls_cipher_suite— разрешенный набор шифров (в нотации OpenSSL).
Внешний аутентификатор LDAP
Удалённый сервер LDAP может использоваться в качестве метода проверки паролей для локально определённых пользователей (пользователей, заданных в users.xml или в локальных путях управления доступом). Для этого укажите ранее определённое имя сервера LDAP вместо разделов password или аналогичных в определении пользователя.
При каждой попытке входа в систему ClickHouse пытается «привязаться» (bind) к DN, указанному параметром bind_dn в определении сервера LDAP, используя предоставленные учётные данные, и в случае успеха пользователь считается аутентифицированным. Это часто называют методом «simple bind».
Пример
Обратите внимание, что пользователь my_user относится к my_ldap_server. Этот LDAP-сервер должен быть настроен в основном файле config.xml, как описано ранее.
Когда включено основанное на SQL управление доступом и учетными записями, пользователи, аутентифицируемые LDAP-серверами, также могут быть созданы с помощью оператора CREATE USER.
Запрос:
Внешний пользовательский каталог LDAP
Помимо локально заданных пользователей, в качестве источника описаний пользователей может использоваться удалённый сервер LDAP. Для этого укажите ранее определённое имя сервера LDAP (см. Определение сервера LDAP) в секции ldap внутри секции users_directories файла config.xml.
При каждой попытке входа ClickHouse сначала пытается найти описание пользователя локально и аутентифицировать его как обычно. Если пользователь не определён, ClickHouse предполагает, что его описание существует во внешнем каталоге LDAP и пытается выполнить операцию bind к указанному DN на сервере LDAP, используя предоставленные учётные данные. В случае успеха пользователь считается существующим и аутентифицированным. Пользователю будут назначены роли из списка, указанного в секции roles. Дополнительно может быть выполнен LDAP‑поиск (search), результаты которого могут быть преобразованы и интерпретированы как имена ролей и затем назначены пользователю, если также настроена секция role_mapping. Всё это подразумевает, что SQL‑управляемая Система управления доступом и учётными записями включена и роли созданы с помощью оператора CREATE ROLE.
Пример
Размещается в файле config.xml.
Обратите внимание, что my_ldap_server, указанный в разделе ldap внутри секции user_directories, должен быть ранее определённым LDAP-сервером, описанным в config.xml (см. Определение LDAP-сервера).
Параметры
server— Одно из имён LDAP-серверов, определённых в конфигурационном разделеldap_serversвыше. Этот параметр обязателен и не может быть пустым.roles— Раздел со списком локально определённых ролей, которые будут назначены каждому пользователю, полученному из LDAP-сервера.- Если роли здесь не указаны или не назначены в процессе сопоставления ролей (см. ниже), пользователь не сможет выполнять никакие действия после аутентификации.
role_mapping— Раздел с параметрами поиска LDAP и правилами сопоставления.- Когда пользователь аутентифицируется, выполняется поиск в LDAP с использованием
search_filterи имени пользователя, выполнившего вход. Для каждой записи, найденной в ходе этого поиска, извлекается значение указанного атрибута. Для каждого значения атрибута, которое имеет указанный префикс, префикс удаляется, и оставшаяся часть значения становится именем локальной роли, определённой в ClickHouse, которую предполагается создать заранее с помощью оператора CREATE ROLE. - В одном и том же разделе
ldapможет быть определено несколько разделовrole_mapping. Все они будут применяться.base_dn— Шаблон, используемый для построения базового DN для поиска в LDAP.- Итоговый DN будет построен путём замены всех подстрок
{user_name},{bind_dn}и{user_dn}в шаблоне фактическим именем пользователя и значениями bind DN и user DN при каждом поиске в LDAP.
- Итоговый DN будет построен путём замены всех подстрок
scope— Область поиска в LDAP.- Допустимые значения:
base,one_level,children,subtree(значение по умолчанию).
- Допустимые значения:
search_filter— Шаблон, используемый для построения фильтра поиска для запроса к LDAP.- Итоговый фильтр будет построен путём замены всех подстрок
{user_name},{bind_dn},{user_dn}и{base_dn}в шаблоне фактическим именем пользователя и значениями bind DN, user DN и base DN при каждом поиске в LDAP. - Обратите внимание, что специальные символы должны быть корректно экранированы в XML.
- Итоговый фильтр будет построен путём замены всех подстрок
attribute— Имя атрибута, значения которого будут возвращены поиском LDAP. По умолчанию —cn.prefix— Префикс, который ожидается в начале каждой строки в исходном списке строк, возвращённом поиском LDAP. Префикс будет удалён из исходных строк, а полученные строки будут интерпретированы как имена локальных ролей. По умолчанию — пустой.
- Когда пользователь аутентифицируется, выполняется поиск в LDAP с использованием