パスワード認証されたユーザーをピア認証されたpostgresセットアップに追加しても機能しない
認証方法としてパスワードを使用する、デフォルトのピア認証を使用するリモートサーバー上の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を使用してサーバーにログインします。つまり、データベースへの接続は実際にはローカルです。
回答
ユーザーはリモートクライアントホストから接続するため、認証タイプはである必要があります。名前付きパイプを使用したローカル接続には使用され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();
、スーパーユーザーとして接続されているときに実行できます。