Authentication
Postgres 錯誤消息:致命:使用者“…”的身份驗證失敗
假設您看到此消息:
FATAL: Ident authentication failed for user "..."
此錯誤消息的原因是什麼?
這意味著 Postgres 正在嘗試使用 Ident 協議對使用者進行身份驗證,但不能。Ident auth 自動將 Unix 使用者名與 Postgres 使用者名匹配。它是這樣工作的:
- 您在數據庫“db”上有數據庫角色“foo”
- 您的
pg_hba.conf
文件(在 中)將“Ident”定義為從某些主機連接的使用者連接/etc/postgres-something/main
到數據庫的協議db
- 建立連接的 unix 使用者名是 ‘foo’
- 在使用者連接的機器上執行的 Ident 伺服器確認他們的使用者名確實是“foo”
可能的原因和解決方法:
- 您嘗試連接的機器上沒有執行Ident**伺服器。**通過嘗試在埠 113 上連接來對此進行測試。如果失敗,請安裝 Ident 伺服器(例如,
sudo apt-get install oidentd
)。- 有一個 Ident 伺服器,但沒有與您嘗試連接的名稱匹配的**數據庫角色(上例中的“foo”)。**因此,通過以某種方式連接到具有超級使用者權限的數據庫來創建它並執行
CREATE ROLE foo
. 或者將條目添加到/etc/postgresql/.../main/pg_ident.conf
(或/var/lib/pgsql/12/data
或任何地方)。- 也許 shell 使用者名與數據庫角色**不匹配。**您可以通過在連接進行時連接到 Ident 伺服器並傳遞正確的埠號來測試這一點。
- 也許您實際上想使用密碼而不是 Ident 進行連接。適當地編輯
pg_hba.conf
文件。例如,更改:host all all 127.0.0.1/32 ident
到
host all all 127.0.0.1/32 md5
請務必在更新
pg_hba.conf
文件後重新啟動 Postgres。您可以通過發出以下命令來做到這一點:sudo service postgresql-12 restart