謝辞: Gene Selkov,Jr.(<selkovjr@mcs.anl.gov>)からEric Marsdenの質問に対する返事として1999-09-08に書かれた電子メールからアイディアをもらいました。
sshをクライアントと PostgreSQLサーバ間のネットワークを暗号化するために使うことができます。正しく行えば、これで十分に安全なネットワーク接続を行うことができるようになるばずです。
まずsshサーバが PostgreSQLと同じマシン上で正しく起動していて、ssh を使ってログインできるユーザが存在することを確かめてください。そうすると、次に示すコマンドでクライアントマシンから安全なトンネルを確立することができます。
$ ssh -L 3333:foo.com:5432 joe@foo.com
-L引数の1番目の数字(3333)はトンネルのローカル側のポート番号で、自由に選択することが可能です。2番目の数字(5432)は、トンネルのリモート側のサーバが使用しているポート番号です。2つのポート番号間の名前もしくはアドレスは、接続しようとしているデータベースサーバのホストです。このトンネルを使ってデータベースサーバに接続するためには、ローカルマシンのポート3333に接続します。
psql -h localhost -p 3333 template1
データベースサーバにとっては、ユーザが実際に joe@foo.comであるかのように見え、認証プロシージャがこのユーザ(joe@foo.com)のために発行した証明書を使います。トンネルの確立が成功するためには、sshを使用して端末セッションを確立したのと同様に、ユーザjoe@foo.comが sshを通して接続することが許可されていなければいけません。
Tip: ここで説明してきた概念に似た手続きを使用する、安全なトンネルを用意できる製品がほかにもいくつか存在します。