ID認証を無効にするまでpostgresqlでパスワードベースの認証が機能しないのはなぜですか?

ID認証を無効にするまでpostgresqlでパスワードベースの認証が機能しないのはなぜですか?

私はFedora 36のリポジトリからpostgresqlとpgadminをインストールしました。初期のpostgresロールとデータベースを設定し、postgresユーザーとしてログインしました。

sudo su - postgres
psql

ここで暗号化されたパスワードを使用して新しいユーザーを設定しました。CREATE ROLE john WITH ENCRYPTED PASSWORD '123';

私も私の行に次の行を追加しましたpg_hba.conf

host    all             all             127.0.0.1/32            scram-sha-256

Unixでrootとして次を試みると、psql -U john -W -h 127.0.0.1次のエラーが発生します。

psql: error: connection to server at "127.0.0.1", port 5432 failed: FATAL:  Ident authentication failed for user "john"

pgadminも同様のエラーメッセージでデータベースにログインできません。

ただし、入力してpg_hba.confこの行を無効にすると、次のようになります。

host    all             all             127.0.0.1/32            ident

突然、pgadminからログインし、psql -U john -W -h 127.0.0.1rootユーザーのコマンドを使用してログインできます。

私は何が間違っていましたか? ID認証が機能するには、なぜ完全に無効にする必要がありますか? psqlクライアントまたはpgadminによる認証に加えて、パスワード認証を強制する方法はありません。

編集 - これは私のpg_hba.confです:

local   all             all                                     peer
#host    all             all             127.0.0.1/32            ident
host    all             all             ::1/128                 ident
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            ident
host    replication     all             ::1/128                 ident
host    all             all             127.0.0.1/32            scram-sha-256

これはデフォルトでリポジトリにpostgresに付属するデフォルトですが、次のようになります。

  • ident1行にコメントを付ける
  • 最後の行を追加しました

答え1

すべてのipv4ローカル接続の既存のIDルール(127.0.0.1以降)

このルールが接続試行と一致すると、これが使用される認証の種類であり、認証が失敗してもファイルの下のルールは使用されません。

https://www.postgresql.org/docs/current/auth-pg-hba-conf.html

各レコードは、接続の種類、クライアントのIPアドレス範囲(接続の種類に関連する場合)、データベース名、ユーザー名、およびこれらのパラメータと一致する接続に使用される認証方法を指定します。接続タイプ、クライアントアドレス、要求されたデータベース、およびユーザー名が一致する最初のレコードが認証を実行するために使用されます。 「失敗」または「バックアップ」はありません。レコードが選択され、認証が失敗した場合、後続のレコードは考慮されません。

つまり、他のものを使用するクライアント接続に対してidentを無効にする必要があります。

あなたがやっていることは必ずしも間違っているわけではありませんが、おそらくrootユーザーに対してのみアクティブにしたいと思います。

一部のソフトウェアでそれを使用している場合は、::1 に一致する IPv6 ルールを作成することもできます。

関連情報