パスワード認証されたユーザーをピア認証されたpostgresセットアップに追加しても機能しない

Aug 21 2020

認証方法としてパスワードを使用する、デフォルトのピア認証を使用するリモートサーバー上のpostgresセットアップに読み取り専用ユーザーを追加したいと思います

私は次のようにユーザーを作成します:

CREATE USER my_user WITH PASSWORD 'some_pass';
GRANT SELECT ON ALL TABLES IN SCHEMA public TO my_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
   GRANT SELECT ON TABLES TO my_user;

pg_hba.confファイルにルールを追加し、この特定のユーザーがパスワードを使用してデータベースにアクセスできるようにする必要があることを示しました。

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   my_db           my_user                                 password <- my new line
local   all             all                                     peer

そしてpsql、次のようにコマンドラインから開始します。

psql -d my_db -U my_user -W

プロンプトが表示されたら、「some_pass」を指定します。これはローカルでは正常に機能しますが、サーバーでは次のエラーが発生します。

psql: FATAL:  Peer authentication failed for user "my_user"

pg_hba.confの変更を有効にするために、postgresqlを再起動する必要がありますか、それとも他に何か足りないものがありますか?postgresqlは実稼働環境で使用されているため、再起動するのは気が進まない。

編集:サーバーがリモートであると述べましたが、データベースにアクセスする前に、まずsshを使用してサーバーにログインします。つまり、データベースへの接続は実際にはローカルです。

回答

1 a_horse_with_no_name Aug 21 2020 at 18:57

ユーザーはリモートクライアントホストから接続するため、認証タイプはである必要があります。名前付きパイプを使用したローカル接続には使用されhostませんlocal

「パスワード」認証方式も、パスワードをクリアテキストで送信するため、使用しないでください。md5代わりに使用してください(または、Postgresサーバーがそのように構成されている場合scram-sha-256

リモート接続を許可するには、IPアドレスも入力する必要があります。IPアドレスがわかっている場合は、それを追加できます。を使用0.0.0.0/0すると、任意のIPアドレスからの接続が可能になります。

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host   my_db           my_user          0.0.0.0/0               md5

クライアントコンピュータがPostgresサーバーと同じネットワークにある場合はsamenet、より安全な選択です。0.0.0.0/0

に変更を適用するにpg_hba.confは、構成を再ロードする必要があります。再起動は必要ありません。リロードは、たとえばselect pg_reload_conf();、スーパーユーザーとして接続されているときに実行できます。