web-dev-qa-db-ja.com

pgAdmin IIIを使用した外部データベースへの接続

(両方のマシンにインストールされている)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を再起動しましたが、マシン全体を再起動するところまで行きました。ここで他に何がうまくいかないのでしょうか?

7
Sean Allred

この行:

すべてのホスト192.168.0.0/24 md5 

192.168.0.Xに一致するIPからの接続を許可します。ここで、Xは任意のバイトです。

エラーメッセージのIPアドレスは192.168.108.161ですが、1080ではないため、このパターンとは一致しません。

192.168.X.Yなどのアドレスを有効にするには、/16ではなく/24が必要です。つまり、最初の16ビットのみが固定されます。

このような:

すべてのホスト192.168.0.0/16 md5 

Postgresqlをリロードすることを忘れないでください。公式ドキュメントから、pg_ctl reloadを使用します。それがうまくいかない場合は、 この質問 にリストされている他の方法があります。

7
Daniel Vérité

2つのことが頭に浮かびます。

  1. 1つ目は、サーバーがネットワークインターフェイスでリッスンしていることを確認することです。デフォルトでは、ローカルホストでのみリッスンします。 postgresql.confファイルを編集して変更します。

    listen_addresses = 'localhost'
    

    代わりにこのようにするには:

    listen_addresses = '*'
    
  2. リモートで接続している場合、postgresユーザーにはパスワードが必要です。デフォルトでは、そのアカウントに関連付けられているパスワードはないため、ローカルの信頼ベースのログインのみが機能します。リモートパスワードログイン(例:pg_hba.conf`のmd5)が機能するためには、パスワードを追加するか、パスワードを使用して新しいユーザーを作成します。

また、pg_hba.confHostを使用する代わりに、hostsslを使用して、リモート接続でSSLを使用することを要求することを検討してください。それ以外の場合、ユーザー名/パスワードの資格情報は、プレーンテキストでネットワーク経由で送信されます。

2
sehrope