PostgreSQLへセキュアに接続する方法
翻訳校正:原井彰弘
PostgreSQLは、おそらく最高のSQLサーバの一つだろう。しかし、初心者にとってはMySQLのような他のSQLデータベースと比較して扱いやすいとはいえない。
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がよく使われるだろう。
- 今日のトップ記事
- 昨日
- 3日前
- 4日前
- 5日前
- 7日前
- ホワイトペーパー
- 話題のタグ
仮想化Java環境のスループットを2倍に--BEA LiquidVMの適応型メモリ管理
Firefox 3が対応したdisplayプロパティの値(3) - inline-table
MSもアドビも学生さんに開発ソフトを無償提供
「Economist」のトップページがリニューアル
あなたがプログラムを理解できない10の理由:第2回
新APIまもなく登場--Google Developer Day 2008の見所とは?
内部統制対策を実現するIT運用管理ツール
-Simplify IT- ITをシンプルに 連載第2回
リスティング広告における競争優位性の維持