LDAP
Эта страница не применима к ClickHouse Cloud. Функция, описанная здесь, недоступна в сервисах ClickHouse Cloud. Смотрите руководство по совместимости с Cloud для получения дополнительной информации.
LDAP-сервер может быть использован для аутентификации пользователей ClickHouse. Существуют два разных подхода для этого:
- Использовать LDAP в качестве внешнего аутентификатора для существующих пользователей, которые определены в
users.xml
или в локальных путях контроля доступа. - Использовать LDAP в качестве внешнего каталога пользователей и разрешить аутентификацию локально не определённых пользователей, если они существуют на LDAP-сервере.
Для обоих этих подходов необходимо определить внутренне именованный LDAP-сервер в конфигурации ClickHouse, чтобы другие части конфигурации могли ссылаться на него.
Определение LDAP-сервера
Чтобы определить LDAP-сервер, необходимо добавить раздел ldap_servers
в config.xml
.
Пример
Обратите внимание, что вы можете определить несколько LDAP-серверов внутри раздела ldap_servers
, используя разные имена.
Параметры
host
— Имя хоста или IP LDAP-сервера, этот параметр обязателен и не может быть пустым.port
— Порт LDAP-сервера, по умолчанию636
, еслиenable_tls
установлен вtrue
, иначе389
.bind_dn
— Шаблон, используемый для построения DN для привязки.- Полученный DN будет построен путём замены всех подстрок
{user_name}
в шаблоне на фактическое имя пользователя во время каждой попытки аутентификации.
- Полученный DN будет построен путём замены всех подстрок
user_dn_detection
— Раздел с параметрами поиска LDAP для обнаружения фактического DN пользователя, к которому выполнена привязка.- Это в основном используется в фильтрах поиска для дальнейшего сопоставления ролей, когда сервер является Active Directory. Полученный DN пользователя будет использоваться при замене подстрок
{user_dn}
там, где это допускается. По умолчанию DN пользователя устанавливается равным DN привязки, но после выполнения поиска он будет обновлён фактическим обнаруженным значением DN пользователя.base_dn
— Шаблон, используемый для построения базового DN для поиска LDAP.- Полученный DN будет построен путём замены всех подстрок
{user_name}
и{bind_dn}
в шаблоне на фактическое имя пользователя и DN привязки во время поиска LDAP.
- Полученный DN будет построен путём замены всех подстрок
scope
— Область поиска LDAP.- Допустимые значения:
base
,one_level
,children
,subtree
(по умолчанию).
- Допустимые значения:
search_filter
— Шаблон, используемый для построения фильтра поиска для поиска LDAP.- Полученный фильтр будет построен путём замены всех подстрок
{user_name}
,{bind_dn}
и{base_dn}
в шаблоне на фактическое имя пользователя, DN привязки и базовый 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
— Поведение проверки сертификата экземпляра 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 пытается "привязаться" к указанному DN, определённому параметром bind_dn
в определении LDAP-сервера, используя предоставленные учетные данные, и, если это успешно, пользователь считается аутентифицированным. Это часто называется методом "простой привязки".
Пример
Обратите внимание, что пользователь my_user
ссылается на my_ldap_server
. Этот LDAP-сервер должен быть настроен в основном файле config.xml
, как описано ранее.
Когда включен SQL-управляемый Контроль доступа и управление учетными записями, пользователи, аутентифицированные с помощью LDAP-серверов, также могут быть созданы с использованием оператора CREATE USER.
Запрос:
Внешний каталог пользователей LDAP
В дополнение к локально определённым пользователям удалённый LDAP-сервер может использоваться как источник определений пользователей. Для этого укажите ранее определённое имя LDAP-сервера (см. Определение LDAP-сервера) в разделе ldap
внутри секции users_directories
в файле config.xml
.
При каждой попытке входа ClickHouse пытается найти определение пользователя локально и аутентифицировать его как обычно. Если пользователь не определён, ClickHouse предположит, что определение существует в внешнем LDAP-каталоге и попытается "привязаться" к указанному DN на LDAP-сервере с использованием предоставленных учётных данных. Если это удастся, пользователя будет считаться существующим и аутентифицированным. Пользователю будут назначены роли из списка, указанного в разделе roles
. Кроме того, можно выполнить LDAP "поиск", и результаты могут быть преобразованы и рассматриваться как имена ролей, которые затем могут быть назначены пользователю, если также настроен раздел 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, выполняется поиск LDAP с использованием
search_filter
и имени вошедшего пользователя. Для каждой записи, найденной в ходе этого поиска, извлекается значение указанного атрибута. Для каждого значения атрибута, имеющего заданный префикс, префикс удаляется, и остальная часть значения становится именем локальной роли, определённой в ClickHouse, которую ожидается создать заранее с помощью оператора CREATE ROLE. - Может быть определено несколько секций
role_mapping
внутри одного и того же разделаldap
. Все они будут применены.base_dn
— Шаблон, используемый для построения базового DN для поиска LDAP.- Полученный DN будет построен путём замены всех подстрок
{user_name}
,{bind_dn}
и{user_dn}
в шаблоне на фактическое имя пользователя, DN привязки и DN пользователя во время каждого поиска LDAP.
- Полученный DN будет построен путём замены всех подстрок
scope
— Область поиска LDAP.- Допустимые значения:
base
,one_level
,children
,subtree
(по умолчанию).
- Допустимые значения:
search_filter
— Шаблон, используемый для построения фильтра поиска для поиска LDAP.- Полученный фильтр будет построен путём замены всех подстрок
{user_name}
,{bind_dn}
,{user_dn}
и{base_dn}
в шаблоне на фактическое имя пользователя, DN привязки, DN пользователя и базовый DN во время каждого поиска LDAP. - Обратите внимание, что специальные символы должны быть правильно экранированы в XML.
- Полученный фильтр будет построен путём замены всех подстрок
attribute
— Имя атрибута, значения которого будут возвращены при поиске LDAP. По умолчаниюcn
.prefix
— Префикс, который ожидается перед каждой строкой в исходном списке строк, возвращённых при поиске LDAP. Префикс будет удалён из оригинальных строк, и полученные строки будут рассматриваться как имена локальных ролей. По умолчанию пустой.
- Когда пользователь проходит аутентификацию, будучи ещё привязанным к LDAP, выполняется поиск LDAP с использованием