0

私は考えられるすべてのGoogle検索用語を試しましたが、私が掘り下げたものはすべて、ローカル接続をに設定するように言い続けていますtrustpg_hba.confローカルで誰かがログインして、彼らが言うようにDBにアクセスできる場合のセキュリティホールのようです)。

pg_hba.confローカル接続ではに設定されますident sameuser。スクリプトはそのユーザーとして実行されているはずですが、次のエラーが発生します。

A database error occurred: 
fe_sendauth: no password supplied

Rubyコードはかなり一般的です:

conn_str = "DBI:pg:dbname=mydb;host=" + localhost
@connection = DBI.connect(conn_str, "myuser", '')

ここで説明するよう~/.pgpassにファイルを作成することでこれを回避できますが、ユーザーがログインしてDBサーバーにアクセスできるようにしたいと思います。

PostgreSQLident sameuserをローカルスクリプトで正しく動作させることができた人はいますか?

4

2 に答える 2

2

私はこれを疑う:

pg_hba.confでは、ローカル接続はidentsameuserに設定されています。スクリプトはそのユーザーとして実行されているはずですが、このエラーが発生します[...]

conn_str = "DBI:pg:dbname=mydb;host=" + localhost
@connection = DBI.connect(conn_str, "myuser", '')

「ローカル」接続は「localhost」への接続と同じではないことに注意してください。接続URLで「localhost」と指定するとすぐに、TCP/IPソケットが作成されます。これらはhost`pg_hba.confのルールによって管理されます。

実際の「ローカル」接続を使用するには、Unixドメインソケットを使用する必要があります。しかし、RubyDBIコネクタがそれらをサポートしているかどうかはわかりません。

于 2012-01-23T18:38:47.033 に答える
1

ident設定は、ローカルシステムユーザーとPostgreSQL8.4で機能します。設定を調整する必要があるかもしれませんpg_hba.conf

データベースログファイルをチェックして、接続が正確にどこから来ているか、およびシステムユーザー名がデータベースロール名と一致するかどうかを確認します。log_connectionsそのためには、postgresql.confでアクティブ化する必要があるかもしれません。

マニュアルは本当に認証方法を説明する素晴らしい仕事をします。

システムユーザー名とデータベースロール名が一致しない場合は、.pgpassファイルを使用する必要があります。ただし、パスワードは安全である必要があります。システムユーザーだけpostgresがそれを読むことができます。私はマニュアルを引用します

Unixシステムでは、.pgpassの権限により、ワールドまたはグループへのアクセスを禁止する必要があります。これは、コマンドchmod 0600〜/.pgpassによって実現します。

于 2012-01-23T18:26:08.383 に答える