我目前使用“md5”身份验证进行局域网访问:
host all all 192.168.1.0/24 md5
我想添加 ldap 身份验证方法,所以之前添加了这一行:
host all all 192.168.1.0/24 ldap "ldap://192.168.1.2/basedn;uid=;,cn=xx,dc=yy,dc=zz,dc=ca"
这对于 ldap 帐户非常有效,但如果我尝试使用 LDAP 服务器上不存在的帐户登录,登录将失败(postgresql 不会尝试 md5 身份验证)。
有没有办法使用 postgresql 支持多种身份验证方法?
答案1
否 -- Since the pg_hba.conf records are examined sequentially for each connection attempt, the order of the records is significant.
-- 换句话说,“第一个匹配项是我要使用的方法”。
您必须md5
在继续“所有用户”LDAP 身份验证之前明确列出所有本地 () 帐户,才能使其正常工作(并且维护文件时会变得棘手pg_hba.conf
)。
作为一种解决方法,您可以使用pam
身份验证方法,并配置 PAM 的“postgres”服务以使用您想要的任何方法(包括回退到替代方法),但这会限制您在系统上安装/配置的任何 PAM 模块。
(对于“限制”的适当广泛定义 - 例如,如果您使用 PAM 作为身份验证方法,则可以对 Postgres 帐户使用一次性密码)。
答案2
我遇到了同样的问题;我想md5
为应用程序用户和ldap
组织中的其他用户使用。一个区别是我使用的是官方的 Docker Postgres 镜像,但我的方法仍然适用于普通的 Postgresql 用户。
postgres
Docker Postgres 镜像默认带有一个用户。您可以pg_hba.conf
通过在用户名前添加加号 来将特定用户添加到文件中+
。
我的 pg_hba.conf 最终如下所示:
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
host all +postgres all md5
host all all all ldap ldapurl="ldap://192.168.1.2:389/ou=People,dc=Company,dc=com?uid?one"
倒数第二行支持应用程序用户,postgres
最后一行支持多个 LDAP 用户帐户。
答案3
这对我有用:
本地所有 postgres 对等体
主机所有用户 1、用户 2 0.0.0.0/0 ldap ldapserver=192.168.0.1 ldapbasedn="DC=domain,DC=local" ldapbinddn="admin@domain" ldapbindpasswd="*******" ldapsearchattribute="sAMAccountName"
本地 全部 全部 对等体
主机全部全部 0.0.0.0/0 md5
主机全部所有 10.10.10.2/32 信任#不要介意这一行...