Поиск параметров подключения через 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=*)