Postgresエラーメッセージ:致命的:ユーザー "…"のID認証に失敗しました


回答:


36

これは、PostgresがIdentプロトコルを使用してユーザーを認証しようとしているが、できないことを意味します。Ident authは次のように機能します。

  • データベース 'db'にデータベースロール 'foo'があります
  • あなたのpg_hba.conf(内のファイル/etc/postgres-something/mainのデータベースに接続するためのプロトコルとして定義「のIdent」)db特定のホストから接続するユーザのために
  • 接続を確立するUNIXユーザー名は「foo」です
  • ユーザーが接続しているマシンで実行されているIdentサーバーは、ユーザー名が本当に「foo」であることを確認します

考えられる原因と解決策:

  1. 接続しようとしているマシン上で実行されているIdentサーバーはありません。ポート113に接続して、これをテストします。失敗した場合は、Identサーバー(例:)をインストールしますsudo apt-get install oidentd
  2. Identサーバーはありますが、接続しようとしている名前(上記の例では「foo」)に一致するデータベースロールはありません。だから、どういうわけかスーパーユーザー権限でデータベースに接続して作成しますCREATE ROLE foo。または、にエントリを追加し/etc/postgresql/.../main/pg_ident.confます。
  3. シェルのユーザー名データベースロールと一致しない可能性があります。あなたはこれをテストすることができるかもしれ接続が起こっている間のIdentサーバに接続し、右側のポート番号を渡すことで。
  4. おそらく、Identではなくパスワード接続したいかもしれません。pg_hba.confファイルを適切に編集します。たとえば、次を変更します。

    host all all 127.0.0.1/32 ident
    

    host all all 127.0.0.1/32 md5
    

2
フェドラの場合、ファイルは/var/lib/psql/data
Anwar

postgresがデフォルトのログインとして 'ident'を使用する理由を誰もが答えようとは思わないでしょうか?
icc97

それは20年前にそれが理にかなっていて、* nixで何も変わらないからですか?:)
スティーブベネット

@ icc97、この回答には「ident」がPostgresのデフォルトログインであることを示すものは何もありません。そのアイデアはどこで得たのですか?私の知る限り、Postgresクラスターのデフォルトのスーパーユーザーロール名は「postgres」です。
ワイルドカード

9

原因についてはわかりませんが、これは私のためにそれを修正しました:

pg_hba.conf

これに変更:

すべての127.0.0.1/32 md5をすべてホスト

正確なエラー: Caused by: org.postgresql.util.PSQLException: FATAL: Ident authentication failed for user "postgres"


1
「ident」を変更->「md5」はそれを私のためにした
-webwesen

3

CentOSで、次の行を追加します/var/lib/pgsql/9.3/data/pg_hba.conf

host all all 127.0.0.1/32 trust

そして、他のエントリをコメント化します。

もちろん、この設定は安全ではありませんが、私のような開発VMをいじっているだけなら、おそらく大丈夫です...


0

これをまだ試していない場合は、pg_hba.confファイルを確認してください。/var/lib/pgsql/9.3/data/pg_hba.conf(Fedora 20)のような名前が付けられます。「find / -name pg_hba.conf」を使用して検索する必要がある場合があります。

ファイルの下部で、ローカルテスト用に「METHOD」値を「trust」に変更します(詳細については、postgresのドキュメントを参照してください)。マシンをリブートして、すべてがクリーンに開始され、新しいパラメーターが読み取られることを確認します。

うまくいけば、これはあなたの苦痛を治すでしょう。PostgreSQL 9.3でFedora 20の問題を解決しました。


PostgreSQLの設定を変更するときに、マシン全体を再起動する必要はありません。代わりに、pg_ctl reloadコンソールから使用SELECT pg_reload_conf();するか、特権ユーザーとしてSQLを実行してみてください。
ベンジャワ14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.