(両方のマシンにインストールされている)pgAdmin IIIから外部データベースに接続しようとしています。クライアントは不平を言います:
データベースへのアクセスが拒否されました
サーバーはデータベースへのアクセスを許可しません:サーバーは報告します
FATAL: no pg_hba.conf entry for Host "192.168.108.161", user "postgres", database "postgres", SSL off
PostgreSQLサーバー上のデータベースにアクセスするには、まずクライアントにサーバーへのプライマリアクセスを許可する必要があります(ホストベース認証)。 PostgreSQLは、
pg_hba.conf
アクセス制御リストが評価される前に、クライアントアドレス/ユーザー名/データベースに一致するパターンが存在し、有効になっているかどうかをSQL GRANT
ファイルで確認します。Pg_hba.confの初期設定は、審査されていない必須のシステム設定によって引き起こされる不要なセキュリティホールを回避するために、非常に制限的です。あなたはおそらく何かを追加したいと思うでしょう
Host all all 192.168.0.0/24 md5
この例では、プライベートネットワーク
192.168.0.0/24
上のすべてのユーザーに、すべてのデータベースへのMD5暗号化パスワードアクセスを許可します。 pgAdmin IIIに組み込まれているpg_hba.conf
エディターを使用して、pg_hba.conf
構成ファイルを編集できます。
pg_hba.conf
を変更した後、pg_ctl
を使用するか、サーバープロセスを停止して再起動することにより、サーバー構成のリロードをトリガーする必要があります。
サーバーが明示的にall内部ネットワークからの接続が受け入れられると述べている場合。
pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
Host all all 127.0.0.1/32 md5
Host all all ::1/128 md5
Host all all 192.168.0.0/24 md5
変更を有効にするために、postmasterを再起動しましたが、マシン全体を再起動するところまで行きました。ここで他に何がうまくいかないのでしょうか?
この行:
すべてのホスト192.168.0.0/24 md5
192.168.0.X
に一致するIPからの接続を許可します。ここで、X
は任意のバイトです。
エラーメッセージのIPアドレスは192.168.108.161
ですが、108
が0
ではないため、このパターンとは一致しません。
192.168.X.Y
などのアドレスを有効にするには、/16
ではなく/24
が必要です。つまり、最初の16ビットのみが固定されます。
このような:
すべてのホスト192.168.0.0/16 md5
Postgresqlをリロードすることを忘れないでください。公式ドキュメントから、pg_ctl reload
を使用します。それがうまくいかない場合は、 この質問 にリストされている他の方法があります。
2つのことが頭に浮かびます。
1つ目は、サーバーがネットワークインターフェイスでリッスンしていることを確認することです。デフォルトでは、ローカルホストでのみリッスンします。 postgresql.conf
ファイルを編集して変更します。
listen_addresses = 'localhost'
代わりにこのようにするには:
listen_addresses = '*'
リモートで接続している場合、postgres
ユーザーにはパスワードが必要です。デフォルトでは、そのアカウントに関連付けられているパスワードはないため、ローカルの信頼ベースのログインのみが機能します。リモートパスワードログイン(例:pg_hba.conf`のmd5
)が機能するためには、パスワードを追加するか、パスワードを使用して新しいユーザーを作成します。
また、pg_hba.conf
でHost
を使用する代わりに、hostssl
を使用して、リモート接続でSSLを使用することを要求することを検討してください。それ以外の場合、ユーザー名/パスワードの資格情報は、プレーンテキストでネットワーク経由で送信されます。