31.18. Поиск параметров подключения LDAP#
31.18. Поиск параметров подключения LDAP #
Если libpq был скомпилирован с поддержкой LDAP (опция
для --with-ldap
configure
),
можно получить параметры подключения, такие как host
или dbname
через LDAP с центрального сервера.
Преимущество заключается в том, что если параметры подключения к базе данных изменятся,
информацию о подключении не нужно обновлять на всех клиентских машинах.
Параметр подключения LDAP использует файл службы подключения
pg_service.conf
(см. Раздел 31.17). Строка в разделе
pg_service.conf
, начинающаяся с
ldap://
, будет распознана как URL LDAP, и будет выполнен запрос LDAP. Результатом должен быть список
keyword = value
пар, которые будут использоваться для установки параметров подключения. URL должен соответствовать
RFC 1959
и иметь форму
ldap://[hostname
[:port
]]/search_base
?attribute
?search_scope
?filter
где hostname
по умолчанию равен
localhost
, а port
по умолчанию равен 389.
Обработка файла pg_service.conf
прекращается после успешного поиска в LDAP, но продолжается, если сервер LDAP недоступен. Это позволяет использовать резервный вариант с дополнительными строками URL LDAP, указывающими на различные серверы LDAP, классическими пары keyword
= value
или параметрами подключения по умолчанию. Если вы предпочитаете получить сообщение об ошибке в этом случае, добавьте синтаксически некорректную строку после URL LDAP.
Пример записи LDAP, созданной с помощью файла LDIF
version:1 dn:cn=mydatabase,dc=mycompany,dc=com changetype:add objectclass:top objectclass:device cn:mydatabase description:host=dbserver.mycompany.com description:port=5439 description:dbname=mydb description:user=mydb_user description:sslmode=require
может быть запрошен с помощью следующего LDAP URL:
ldap://ldap.mycompany.com/dc=mycompany,dc=com?description?one?(cn=mydatabase)
Также можно смешивать обычные записи файлов служб с поиском в LDAP.
Полный пример для станзы в файле pg_service.conf
будет следующим:
# only host and port are stored in LDAP, specify dbname and user explicitly [customerdb] dbname=customer user=appuser ldap://ldap.acme.com/cn=dbserver,cn=hosts?pgconnectinfo?base?(objectclass=*)