問題
Postgres は IPv6 を使用する可能性があります -h localhost
指定時 上記の pg_hba.conf
が与えられた ident
を指定します 、パスワード プロンプトが返されます。
ただし、 -h 127.0.0.1
の場合 が指定されている場合、Postgres に IPv4 の使用を強制します trust
に設定されています 上記の構成で、パスワードなしでアクセスできます。
答え
したがって、答えは pg_hba.conf
の IPv6 ホスト行を変更することです trust
を使用する :
# IPv6 local connections:
host all all ::1/128 trust
構成を変更した後、忘れずに Postgres サービスを再起動してください。
pg_hba.conf で、最初の一致 数えます。マニュアル:
<ブロック引用>一致する接続タイプ、クライアント アドレス、要求されたデータベース、およびユーザー名を持つ最初のレコードが認証の実行に使用されます。「フォールスルー」または「バックアップ」はありません。1 つのレコードが選択され、認証が失敗した場合、後続のレコードは認証されません。考慮。一致するレコードがない場合、アクセスは拒否されます。
逆順に注意してください :
host all all 127.0.0.1/32 trust
host all all 127.0.0.1/32 ident
ただし:
host all all localhost ident
host all all localhost trust
リロードすることを忘れないでください pg_hba.conf
への変更を保存した後 . (再起動は必要ありません。) マニュアル:
pg_hba.conf
ファイルは、起動時およびメイン サーバー プロセスが SIGHUP
を受信したときに読み取られます。 信号。アクティブなシステムでファイルを編集する場合は、ポストマスターに通知する必要があります (pg_ctl reload
を使用) 、SQL 関数 pg_reload_conf()
を呼び出す 、または kill -HUP
を使用 ) を実行して、ファイルを再読み込みします。
あなたが書いたように本当に「追加」すれば、何の効果もありません。しかし、交換すると
最初のケースでは、trust
を取得します。 オープンドアポリシーである認証方法。マニュアル:
PostgreSQL は、サーバーに接続できる人は誰でも、指定したデータベース ユーザー名 (スーパーユーザー名も含む) を使用してデータベースにアクセスすることを許可されていると想定しています
しかし、2 番目のケースでは、ident
を取得します。 この認証方法は、正しく機能するように設定する必要があります。
さらに、Cas が後で指摘したように、localhost
127.0.0.1/32
ながら、IPv4 と IPv6 の両方をカバー IPv4 にのみ適用されます。
古いバージョンの 8.4 を実際に使用している場合は、8.4 の古いマニュアルを参照してください。 8.4 が 2014 年に EOL になり、サポートされなくなったことをご存知ですか?現在のバージョンへのアップグレードを検討してください。
Postgres 9.1 以降では、代わりに peer
を使用します ident
より .
詳細:
- パスワードなしで psql コマンドを使用してバッチ ファイルを実行する