PostgreSQLへセキュアに接続する方法

文:Vincent Danen(TechRepublic) 翻訳校正:原井彰弘
2008-01-29 16:30:00
  • このエントリーをはてなブックマークに追加

 MySQLが信用に関する情報をすべてSQLデータベースそのものに格納するのに対し、PostgreSQLは2つのアプローチを用いる。テーブルへのアクセスとパスワードの情報に関してはPostgreSQL自身で定義する一方で、実際の接続に関する情報は外部のファイルに格納されるのである。この設定ファイルは一般的には/var/lib/pgsql/data/pg_hba.confという名前で存在しており、誰がどのような方法でデータベースにアクセスできるのかを定めている。

 PostgreSQLでは、ローカル接続と(TCP/IPを用いた)リモート接続の2種類の接続方法をサポートしている。そのため、設定ファイルはどちらの接続タイプを定義しているかによって少々異なって見える。以下の例を見て欲しい。

local     all           postgres                            trust
host      all           postgres      127.0.0.1/32            trust

 上記の例では、postgresユーザのデータベースへの接続を設定している。localと書かれている最初の行は、UNIXのドメインソケット接続もしくはローカル接続を示している。一方、hostと書かれている2行目はTCP/IP接続を示している。この設定はさらに細かく指定することが可能だ。たとえばhostsslを指定すると、TCP/IP通信をSSLで行うことを要求できる。一方、単にhostを指定した場合は、暗号化の有無に関係なくすべての接続が対象となる。

 このファイルの構文は以下のようになる。

  • local [database] [user] [method] [option]
  • host [database] [user] [cidr-address] [method] [option]

 お分かりのように、2つの接続タイプでもっとも異なるのは、hostタイプ(またはhostssl、hostnossl)ではCIDRアドレスを指定する必要があるということだ。CIDRアドレスはIPアドレスとCIDRネットマスクで構成される。上記の例では、127.0.0.1/32という値が使用されている。ちなみに、この項目では「192.168.0.0/24」といった表記方法のほかに「192.168.0.0 255.255.255.0」という表記も使用できる。

 databaseフィールドでは、どのデータベース接続の定義を行うかを指定する。「all」というキーワードを指定した場合は、すべてのデータベースへの接続を定義することになる。また、userフィールドでは指定されたデータベースに接続可能なユーザを設定する。そして、最後のmethodフィールドでは、利用する認証方法を指定する。

 認証方法としてはtrust(認証を行わない)、reject(接続を拒否する)、password(プレーンテキストのパスワードを用いる)、cryptまたはmd5(cryptまたはmd5を用いて暗号化されたパスワードを用いる)、ident(identプロトコルを用いる)、krb5(Kerberos認証を用いる)、pam(PAMを用いる)、ldap(LDAPデータベースから信用情報を取得する)のいずれかを利用することができる。ただし、このように認証方法には非常に多くの選択肢が存在するものの、一般的にはパスワードを暗号化して送信するmd5がよく使われるだろう。

  • 新着記事
  • 特集
  • ブログ