web-dev-qa-db-ja.com

Postgresにユーザーがログインできないのはなぜですか

Postgresで読み取り専用のユーザーを設定しようとしましたが、ログオンできません。私は問題を解決するために取る次のステップがわかりません。

ユーザーXXXXとしてログオンしようとすると、エラーが発生します-psql:致命的:ユーザー "XXXX"のパスワード認証に失敗しました

ログファイルを見ると、次の行が見つかります。

< 2014-05-20 10:22:24.830 NZST >FATAL:  password authentication failed for user "XXXX"
< 2014-05-20 10:22:24.830 NZST >DETAIL:  Connection matched pg_hba.conf line 104: "Host DATABASENAME        XXXX           10.0.0.0/8              md5"

もちろん、私はパスワードを何度もリセットしてみましたが、役に立ちませんでした。 md5から機能しないパスワードに変更してみました。興味深いことに、認証メカニズムを「信頼する」に設定しても機能しました。

Postgres 9.3を使用しています。

このユーザーを削除してリセットすることはできません-エラー「エラー:ロール "XXXX"を削除できません。一部のオブジェクトがそれに依存しているため、詳細:データベースDATABASENAMEの特権です」

新しいユーザーを作成した場合、その新しいユーザーはデータベースへの接続に問題はありません。 (私はpg_hba.confの適切な行を複製し、コース名を変更しました)

コマンド「DBNAMEのすべてをXXXXに許可」を発行しても、違いはないようです。

\ ddpコマンドを実行すると、

    Default access privileges
  Owner   | Schema |   Type   | Access privileges 
----------+--------+----------+-------------------
 postgres | public | sequence | XXXX=r/postgres
 postgres | public | table    | XXXX=r/postgres

これがなぜユーザーを完全に削除して再作成するのを停止するのか、またはこれを[安全に]修正する方法が完全にわからない。

何が起こっているのか、どのようにログインの問題をさらにデバッグするのかを理解していただければ幸いです。

8
davidgo

このエラーが発生した場合:

psql:致命的:ユーザー「XXXX」のパスワード認証に失敗しました

パスワードが正しいにもかかわらず、次に確認するのはアカウントの有効性です。

SELECT usename, valuntil FROM pg_user;

PgAdminのバグが過去にこのvaluntilを誤ってリセットし、ユーザーが上記のエラーメッセージで接続できなくなる方法については、 PostgreSQLユーザーがパスワードを変更した後にサーバーに接続できない を参照してください。

それがあなたのケースである場合、あなたはそれを修正することができます:

ALTER USER username VALID UNTIL 'infinity';
11
Daniel Vérité

私はこれに何度か苦労して、次の方法を考え出しました。

1)pg_hba.confを変更し、「ローカル」と「ホスト」の両方のエントリの認証モードを「信頼」に設定します。

ローカルオールオールトラスト

すべての127.0.0.1/32信頼をホスト

2)データベースを再起動します:postgres $ pg_ctl restart

3)データベースに移動し、postgresパスワードを設定します。

postgres $ psql

postgres =#変更ユーザーpostgresパスワード 'mypassword';

ALTER ROLE

postgres =#\ q

4)pg_hba.confで認証メカニズムをパスワードに戻します。

ローカルすべてのすべてのパスワード

すべての127.0.0.1/32パスワードをホストする

(これはmd5認証でも機能すると思いますが、試していません)

5)最後にもう一度データベースを再起動します:postgres $ pg_ctl restart

3
Ward Q