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
これがなぜユーザーを完全に削除して再作成するのを停止するのか、またはこれを[安全に]修正する方法が完全にわからない。
何が起こっているのか、どのようにログインの問題をさらにデバッグするのかを理解していただければ幸いです。
このエラーが発生した場合:
psql:致命的:ユーザー「XXXX」のパスワード認証に失敗しました
パスワードが正しいにもかかわらず、次に確認するのはアカウントの有効性です。
SELECT usename, valuntil FROM pg_user;
PgAdminのバグが過去にこのvaluntil
を誤ってリセットし、ユーザーが上記のエラーメッセージで接続できなくなる方法については、 PostgreSQLユーザーがパスワードを変更した後にサーバーに接続できない を参照してください。
それがあなたのケースである場合、あなたはそれを修正することができます:
ALTER USER username VALID UNTIL 'infinity';
私はこれに何度か苦労して、次の方法を考え出しました。
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