Postgresql 的多种身份验证方法

Postgresql 的多种身份验证方法

我目前使用“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 用户。

postgresDocker 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 信任#不要介意这一行...

相关内容