Postgresql

PostgreSQL 使用者映射在 AD 使用者和 DB 使用者之間不起作用

  • October 28, 2021

我正在嘗試在我的實驗室 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.

引用自:https://dba.stackexchange.com/questions/301709