3

一部のサーバーでのみアクセスできる PostgreSQL データベースに自分のコンピューターで接続しようとしています (db はローカル接続のみを許可します)。次のようにポート転送を使用できると思いました:

$ ssh someserver.com -L 5100:127.0.0.1:5432

次に、次のようにデータベースに接続します。

$ psql -h 127.0.0.1 -p 5100 -U postgres dbname

ただし、問題はサーバーにパスワードがないことですが、転送されたポートに接続しようとすると、パスワードを要求されます。空のままにすると、「psql: fe_sendauth: パスワードが指定されていません」が返され、接続できません。

その理由は何ですか?コンピューターに PostgreSQL インスタンスもありますが、競合が発生する可能性はありますか?

4

1 に答える 1

9

データベースがローカル接続のみを許可すると言う場合、「unix ソケット」接続と「TCP から localhost へ」接続を区別する必要があります。これらは同じものではなく、まったく異なる方法で処理される可能性があります。

テストするには: データベース サーバーで-h 127.0.0.1、psql コマンドラインに追加すると、接続できるかどうかに違いが生じるかどうかを確認します。

パスワードが必要かどうかのルールは にありますpg_hba.conf。データベース サーバーが UNIX (「ローカル」) 接続に「ident」認証を使用するように設定されている可能性があるため、Unix ユーザー名がデータベース ユーザー名として自動的に受け入れられます。この認証方法は一般に TCP/IP (「ホスト」) 接続では使用できないため、他の方法を使用する必要があります。「md5」に設定されている場合は、パスワードが必要になります。

おそらく、ローカルに接続しているときに、データベースでユーザー アカウントのパスワードを設定するだけで済みますALTER USER username PASSWORD 'password'。リモート接続時に常にパスワードの入力を求められるのを避けたい場合は、.pgpassファイルを作成してクライアント ユーザー アカウントに保存します: http://www.postgresql.org/docs/9.0/interactive/libpq-pgpass.html

于 2010-12-24T11:19:09.573 に答える