次のメッセージが表示されているとします。
FATAL: Ident authentication failed for user "..."
このエラーメッセージの原因は何ですか?
これは、PostgresがIdentプロトコルを使用してユーザーを認証しようとしており、認証できないことを意味します。 Ident authは次のように機能します。
pg_hba.conf
ファイル(/etc/postgres-something/main
内)は、特定のホストから接続するユーザーのデータベースdb
に接続するためのプロトコルとして「Ident」を定義しています考えられる原因と解決策:
Sudo apt-get install oidentd
)をインストールします。Identサーバーはありますが、接続しようとしている名前(上記の例では「foo」)に一致するデータベースロールがありません。したがって、スーパーユーザー権限で何らかの方法でデータベースに接続して作成し、CREATE ROLE foo
を実行します。または、/etc/postgresql/.../main/pg_ident.conf
(または/var/lib/pgsql/12/data
またはどこにでも)にエントリを追加します。
シェルのユーザー名がデータベースロールと一致しないのかもしれません。あなた これをテストできるかもしれません 接続が行われている間に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
これに変更:
すべてのホスト127.0.0.1/32 md5
正確なエラー:Caused by: org.postgresql.util.PSQLException: FATAL: Ident authentication failed for user "postgres"
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
まだ試していない場合は、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で私の問題を解決しました。