Если библиотека libpq была собрана с поддержкой LDAP (использован параметр
для скрипта --with-ldapconfigure)
существует возможность получения таких параметров соединения, как host
или dbname через протокол LDAP с центрального сервера.
Преимущество заключается в том, что при изменении параметров соединения для базы данных
информацию о соединении не требуется обновлять на всех клиентских компьютерах.
Поиск параметров соединения по протоколу LDAP использует файл сервисов соединений
pg_service.conf (см. Раздел 4.1.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
может быть запрошена с помощью следующего URL LDAP:
ldap://ldap.mycompany.com/dc=mycompany,dc=com?description?one?(cn=mydatabase)
Также можно комбинировать обычные записи файла служб с поиском в LDAP.
Полный пример секции в pg_service.conf
будет выглядеть следующим образом:
# в LDAP хранятся только хост и порт, укажите dbname и user явно [customerdb] dbname=customer user=appuser ldap://ldap.acme.com/cn=dbserver,cn=hosts?pgconnectinfo?base?(objectclass=*)