如果 libpq
编译时带有 LDAP 支持
(configure
的
选项),
那么可以从一个中央服务器通过 LDAP
检索诸如
--with-ldaphost 或
dbname
之类的连接选项。
这样做的好处是,
如果一个数据库的连接参数发生了变化,
不必在所有客户端机器上更新连接信息。
LDAP 连接参数查找使用连接服务文件
pg_service.conf
(参见
Section 32.17)。
一个
pg_service.conf
节中以
ldap://
开头的行会被识别为一个 LDAP
URL,
并且会执行一次 LDAP 查询。
结果必须是一个
keyword = value
对的列表,
它们将被用来设置连接选项。
URL 必须符合
RFC 1959,
并且采用
ldap://[hostname[:port]]/search_base?attribute?search_scope?filter
的形式,
其中 hostname
默认为 localhost,
port
默认为 389。
一次成功的 LDAP 查找之后,
对
pg_service.conf
的处理就会终止;
但如果无法联系到 LDAP 服务器,
处理会继续。
这是为了提供一种后备机制,
即提供指向不同 LDAP 服务器的进一步 LDAP
URL 行、
传统的 keyword
= value 对,
或默认的连接选项。
如果你希望在这种情况下得到一条错误消息,
可以在 LDAP URL
之后添加一条语法不正确的行。
一个用 LDIF 文件创建的 LDAP 条目示例
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=*)