Postgresql 中文操作指南

34.18. LDAP Lookup of Connection Parameters #

如果 libpq 已使用 LDAP 支持进行编译(configure 的选项 —​with-ldap),那么可以通过 LDAP 从中央服务器检索诸如 hostdbname 等的连接选项。这样做的好处是,如果数据库的连接参数发生更改,则不必在所有客户端计算机上更新连接信息。

LDAP 连接参数查找使用连接服务文件 pg_service.conf(参见 Section 34.17)。以 ldap:// 开头的 pg_service.conf 连字串中的一行将被识别为 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=*)