2009-04-15 17 views
4

私はリモートVPSサーバ(CentOS 5)にPostgreSQL DBを持っています。私はローカルのMacノートパソコンからRailsアプリケーションに接続するために接続したいと思います。私のラップトップでは、ActiveRecord PostgreSQLアダプタ(postgres (0.7.9.2008.01.28))をインストールしました。ActiveRecordはPostgreSQLにリモートで接続し、DBパスワードを保護できますか?

私はPostgreSQL docsで読む:

パスワードベースの認証方法がMD5、暗号、およびパスワードです。これらのメソッドは、パスワードが接続を介して送信される方法(MD5ハッシュ、暗号化暗号化、およびクリアテキスト)を除いて、同様に動作します。攻撃を「盗聴」

[...]

あなたがすべてでパスワードを懸念している場合は、MD5が好ましい...平野パスワードが開いて、インターネット経由での接続のために特に避けるべきされる(しない限り、 SSL、SSH、または別の通信セキュリティラッパーを接続の周りに使用します)。ローカルホストの接続のために、このような何かを持っているでしょうdatabase.yml標準のRailsで

...

development: 
    adapter: postgresql 
    database: journalapp_development 
    username: xxx 
    password: yyy 
    host: localhost 

しかし、PostgreSQLのドキュメントで説明した認証方法についてそこには何もありません。 "auth_method: md5"のようなオプションがありますか?

+0

明確にするため、接続に問題がありますか? –

+0

いいえ、私が一般のインターネットにどのようにしっかりと接続できるかを調べるだけです。 – Ethan

答えて

8

Postgresがこの機能を許可するかどうかに関係なく、SSHトンネリングを使用してリモートデータベースへの安全な接続を有効にすることができます。ここでのWebドキュメントから無償スタックオーバーフローのペースト中です:

まずSSHサーバがPostgreSQLサーバと同じマシン 上で正常に動作して であることを確認して、あなた は、いくつかのようにsshを使ってログインできることユーザー。

のssh -L 3333:foo.com:5432 [email protected] -L引数で 最初の数、 は、その後、あなたは クライアントマシンからこのようなコマンドで安全なトンネルを確立することができ 3333は、あなたの端のポート番号です。 トンネルです。 を自由に選択することができます。 2番目の番号5432は、トンネルのリモートエンド です。サーバが使用しているポート番号は です。 という名前またはポート番号 の間のIPアドレスは、接続先のデータベースサーバー のホストです。このトンネルを使ってデータベース・サーバ に接続するため では、ローカルマシン上のポート 3333に接続します。

のpsql -h localhostの-pデータベースサーバは、それは、あなたかのよう になります に3333件のpostgres実際にユーザー [email protected]であり、この ユーザーとホストからの接続に 認証手順が に設定されているものを使用します。サーバ は、実際には がSSHサーバと PostgreSQLサーバとの間で暗号化されていないので、接続が SSLで暗号化されているとは思わないことに注意してください。 は同じマシン上にあるので、セキュリティリスクはすべて である必要があります。

さらに詳しい情報が必要な場合は、「SSLトンネル」または「postgres SSLトンネル」を検索して、オンラインで見つけることができます。ここで私は上記を得たPostgresのサイトがあります:

http://www.postgresql.org/docs/current/static/ssh-tunnels.html

Railsのために要約すると、あなたはその後、次の操作を行います:

1)ターミナルウィンドウで、確立するために、上記の最初のsshコマンドを実行します。トンネル。そのような

2)を設定し、データベースの小道具:

development: 
    adapter: postgresql 
    database: journalapp_development 
    username: xxx 
    password: yyy 
    host: localhost 
    port: 3333 
+0

私はあなたが最初の文章で "SSHトンネリング"を書くことを意味すると信じています。 –

+0

これは、サーバ上のsshdがfoo.comインタフェース上の接続を受け入れる場合にのみ機能します。最初のfoo.comをlocalhostに置き換える方が簡単です。 – nasmorn

+0

@runakoこれがうまくいくためには、両方のシステムにPostgreSQLをインストールする必要がありますか?それ以外の場合は、クライアントマシンで 'psql ...'をどのように実行しますか? – Noz

1

私はオンラインで見ていて、あなたが探しているものにはオプションがないようですが、実際にはクライアントライブラリlibpqにはこれが言及されていません。

私の推測では、これはあなたの代わりにlibpq内でネゴシエートされています。いずれの場合でも、md5はデフォルトの認証方法である可能性があります。

0

あなたが安全でないチャネルますSSLまたは(runakoを説明したように)SSH Tunnelingとのあなたの通信を暗号化する必要性以上のPostgreSQLサーバに接続する場合。

関連する問題