Поиск параметров подключения через LDAP

Если libpq была скомпилирована с поддержкой LDAP (параметр --with-ldap для configure), такие параметры подключения, как host или dbname, можно получить через LDAP из центрального сервера. Преимущество этого состоит в том, что при изменении параметров подключения к базе данных нет необходимости обновлять информацию о подключении на всех клиентских компьютерах.

При поиске параметров подключения через LDAP используется файл подключений служб qhb_service.conf (см. раздел Файл подключений служб). Строка в файле qhb_service.conf, начинающаяся с ldap://, будет распознаваться как URL в LDAP, и выполнится запрос LDAP. Результатом должен быть список пар keyword = value, который будет использоваться для установки параметров подключения. Эта URL должна соответствовать RFC 1959 и иметь форму

ldap://[имя_хоста[:порт]]/база_поиска?атрибут?область_поиска?фильтр

где по умолчанию имя_хостаlocalhost, а порт — 389.

Обработка qhb_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

можно запросить с помощью следующей URL LDAP:

ldap://ldap.mycompany.com/dc=mycompany,dc=com?description?one?(cn=mydatabase)

Также можно сочетать обычные записи в файле служб с поиском в LDAP. Полный пример строки в файле qhb_service.conf может быть следующим:

# в LDAP хранится только имя и порт хоста; имя базы данных и пользователя задайте явно
[customerdb]
dbname=customer
user=appuser
ldap://ldap.acme.com/cn=dbserver,cn=hosts?pgconnectinfo?base?(objectclass=*)