Postgresql

在 PostgreSQL 中同時啟用 ident 和 md5 身份驗證

  • September 21, 2016

在 Fedora 12 上,我正在為自己設置一個測試數據庫,而 pg_hba.conf 預設包含以下內容:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               ident
# IPv4 local connections:
host    all         all         127.0.0.1/32          ident
# IPv6 local connections:
host    all         all         ::1/128               ident

我想啟用 md5 登錄,以便名為“foo”的 PostgreSQL 使用者可以訪問名為“foo”的數據庫。但是,當我添加這一行並重新啟動 postgres 時:

local   foo         foo                               md5

使用我的正常使用者帳戶執行 psql -U ‘foo’ 仍然會產生以下消息:

psql: FATAL:  Ident authentication failed for user "foo"

在我可以通過 md5 登錄到“foo”之前,我必須刪除第一條本地線路(它有 ident)。

如何在保持 ident 身份驗證的同時為“foo”啟用 md5 身份驗證?

https://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html表示條目的順序很重要,具體來說:

由於每次連接嘗試都會按順序檢查 pg_hba.conf 記錄,因此記錄的順序很重要。通常,較早的記錄將具有緊密的連接匹配參數和較弱的身份驗證方法,而較晚的記錄將具有較寬鬆的匹配參數和更強的身份驗證方法。例如,可能希望對本地 TCP/IP 連接使用信任身份驗證,但對遠端 TCP/IP 連接需要密碼。在這種情況下,為來自 127.0.0.1 的連接指定信任身份驗證的記錄將出現在為更廣泛的允許客戶端 IP 地址指定密碼身份驗證的記錄之前。

(所以嘗試顛倒順序 - 將您添加的行放在頂部)

引用自:https://serverfault.com/questions/112837