web-dev-qa-db-ja.com

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

次のメッセージが表示されているとします。

FATAL:  Ident authentication failed for user "..."

このエラーメッセージの原因は何ですか?

29
Steve Bennett

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

  • データベース 'db'にデータベースロール 'foo'があります
  • pg_hba.confファイル(/etc/postgres-something/main内)は、特定のホストから接続するユーザーのデータベースdbに接続するためのプロトコルとして「Ident」を定義しています
  • 接続を行う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(または/var/lib/pgsql/12/dataまたはどこにでも)にエントリを追加します。

  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
    
41
Steve Bennett

原因は不明ですが、これで解決しました。

pg_hba.conf

これに変更:

すべてのホスト127.0.0.1/32 md5

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

8
jacktrades

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

Host all all 127.0.0.1/32 trust

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

もちろん、この設定はnot安全ですが、開発をいじるだけの場合はVM私のように問題ないでしょう...

Centos 7の場合、pg_hba.confを以下に変更します:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
#Host    all             all             127.0.0.1/32            ident
Host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
#Host    all             all             ::1/128                 ident
Host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     all                                     peer
#Host    replication     all             127.0.0.1/32            ident
#Host    replication     all             ::1/128                 ident
0
Kul Jeet

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

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

うまくいけば、これはあなたの悩みを癒すでしょう。 Fedora 20とPostgreSQL 9.3で私の問題を解決しました。

0
Alan Thompson