PostgreSQL 使用者映射在 AD 使用者和 DB 使用者之間不起作用
我正在嘗試在我的實驗室 RHEL PSQL 13 和我的 AD 之間設置 kerberos 身份驗證並取得一些成功,除非我嘗試按照文件中的說明在 pg_ident.conf 中配置使用者映射。
我的 psql 使用者是
user
,我的 AD 使用者是user@domain.com
. 後者用於使用者連接,前者是使用者在數據庫中的定義方式。我需要剝離域以與 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 進行連接時
user@domain.com
,例如在 pgAdmin4 中,它在 psql 日誌中顯示以下內容失敗:LOG: no match in usermap "ad" for user "user@domain.com" authenticated as "user@DOMAIN.COM" FATAL: GSSAPI authentication failed for user "user@domain.com" 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 上。
好的,當未指定使用者名時,設置在其他客戶端中按預期工作,因為它採用 kerberos 票證中的一個,即 sAMAccountName。例如,Windows 上的 psql 客戶端無需指定使用者名即可工作。
如果我將 sAMAccountName 放在 pgAdmin 使用者名欄位中,它就可以工作。在我的情況下,UPN 與 sAMAccountName+REALM 不匹配,但在大多數情況下它們會匹配,因此使用 UPN 的左側可以安全地假設等於 sAMAccountName 屬性。
但是,如果我提供一個,我仍然不知道為什麼 pg_ident.conf 不剝離域名…
第三列
pg_ident.conf
必須與您登錄數據庫的使用者名匹配。在您的情況下,登錄到 database/PgAdmin4 只是user
,而不是完全限定的user@domain.com
.