今回は、md5を使ったパスワード認証の設定を行ってみましょう。 まず、パスワードを指定してユーザーを作成します。
ユーザーの作成はpsqlコマンドを用いてpostgresユーザーで適当なデータベースに接続し、CREATE USERコマンドを実行します。
template1=# CREATE USER testuser WITH CREATEDB PASSWORD 'secret';
上記の例では、データベースの作成権限も一緒に与えています。ここで注意したいのが、psqlのヒストリ機能です。上向き矢印のカーソルキーを押すとパスワードが見えてしまいます。そのため、設定後は、psqlのヒストリファイル~/.psql_historyを開き、該当個所を削除しておきましょう。
すでに存在するユーザーに対してパスワードを設定したい場合は、次のように「ALTER USER」コマンドを使用します。
template=# ALTER USER testuser WITH PASSWORD 'secret';
ユーザーにパスワードを設定したら、pg_hba.confファイルの初期設定の行の一番上に次の行を追加します。
local all testuser md5
そして、編集したpg_hba.confファイルを適用するためにpostgresユーザーで設定ファイルのリロードを行います。
$ pg_ctl reload
以上で設定は完了です。
testuserでUNIXドメイン接続をしようとすると次のようにパスワードを聞かれるようになります。
$ psql template1 testuser
Password for user testuser:
template1=# SELECT rolname,rolpassword FROM pg_authid;
rolname | rolpassword
----------+-------------------------------------
postgres |
testuser | md52a2009905b966f356aa26b60d6e9bb58
(2 rows)
ただし、これを見たとしてもパスワードは暗号化されているため、たとえスーパーユーザーであっても実際のパスワードを知ることはできません。
PostgreSQLを利用する一般的なシステム構成としては、クライアントアプリケーションとPostgreSQLを同一のサーバマシンで動作させることはまれで、別々のサーバマシンで動作させるのが主流です。 その際、注意しなければならないのは、アプリケーションとPostgreSQL間を流れるデータのセキュリティです。少しでも盗聴される恐れがあれば、通信経路を暗号化する必要があります。PostgreSQLでは、通信経路の暗号化方式としてSSL(Secure Sockets Layer)と呼ばれるプロトコルが利用できますが、今回はより簡単なSSH(Secure SHell)を利用した暗号化方法をご紹介します。
SSHには、クライアントの指定したポートへの出力をサーバの指定したポートに転送するポート転送機能があります。ポート転送の設定は次のコマンドで行えます。
$ ssh -L クライアントのポート番号:転送先のIPアドレス(ホスト名):転送先のポート番号 ユーザー名@転送先のIPアドレス(ホスト名)
具体例として、例えば次のコマンドを実行したとします。
$ ssh -L 3333:dbhost:5432 testuser@dbhost
すると、次のコマンドでローカルホストの3333ポートに接続した場合、データは暗号化されたうえでdbhostサーバの5432ポートへ転送されるようになり、あたかもローカルホストでPostgreSQLが稼働しているような感じで接続することができます。
$ psql -h localhost -p 3333 template1
以上が、最も基礎的なクライアント認証と通信経路の暗号化方法です。認証設定は、厳密に設定しないと情報漏えいにつながる可能性がありますので、十分検討、注意したうえで設定し、PostgreSQLを運用してください。
Copyright © ITmedia, Inc. All Rights Reserved.