我正在尝试在我的实验室 RHEL PSQL 13 和我的 AD 之间设置 kerberos 身份验证并取得一些成功,除非我尝试按照文档中的说明在 pg_ident.conf 中配置用户映射。
我的 psql 用户是user
,我的 AD 用户是[email protected]
. 后者用于用户连接,前者是用户在数据库中的定义方式。我需要剥离域以与 psql 用户正确匹配。
AD 用户已配置机器 SPN,并且已在 psql 配置中设置了 keytab。
pg_hba.conf
文件:
# TYPE DATABASE USER ADDRESS METHOD
host all all 0.0.0.0/0 gss include_realm=1 krb_realm=DOMAIN.COM map=ad
pg_ident.conf
文件:
# MAPNAME SYSTEM-USERNAME PG-USERNAME
ad /^(.*)@DOMAIN\.COM$ \1
ad /^(.*)@domain\.com$ \1
现在,当我尝试使用 kerberos auth with 进行连接时[email protected]
,例如在 pgAdmin4 中,它在 psql 日志中显示以下内容失败:
LOG: no match in usermap "ad" for user "[email protected]" authenticated as "[email protected]"
FATAL: GSSAPI authentication failed for user "[email protected]"
DETAIL: Connection matched pg_hba.conf line 99: "host all all 0.0.0.0/0 gss include_realm=1 krb_realm=DOMAIN.COM map=ad"
如果我设置如下配置并在没有域的情况下pg_hba.conf
使用连接user
,我可以正常连接。
pg_hba.conf
文件:
# TYPE DATABASE USER ADDRESS METHOD
host all all 0.0.0.0/0 gss include_realm=0 krb_realm=DOMAIN.COM
我在这里做错了什么?为什么用户不映射?我在运行 PSQL 13 的 RHEL8 上。
这个问题是同一个问题。
第三列
pg_ident.conf
必须与您登录数据库的用户名匹配。在您的情况下,登录到 database/PgAdmin4 只是user
,而不是完全限定的[email protected]
.好的,当未指定用户名时,设置在其他客户端中按预期工作,因为它采用 kerberos 票证中的一个,即 sAMAccountName。例如,Windows 上的 psql 客户端无需指定用户名即可工作。
如果我将 sAMAccountName 放在 pgAdmin 用户名字段中,它就可以工作。在我的情况下,UPN 与 sAMAccountName+REALM 不匹配,但在大多数情况下它们会匹配,因此使用 UPN 的左侧可以安全地假设等于 sAMAccountName 属性。
但是,如果我提供一个,我仍然不知道为什么 pg_ident.conf 不剥离域名...