PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

32.18. 通过 LDAP 检索连接参数 #

如果 libpq 编译时带有 LDAP 支持 (configure 的 --with-ldap 选项), 那么可以从一个中央服务器通过 LDAP 检索诸如 host 或 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=*)