企業データベースとしてPostgreSQLがMySQLより優れているわけ

文:Vincent Danen(TechRepublic) 翻訳校正:石橋啓一郎
2010-02-02 07:00:00
  • このエントリーをはてなブックマークに追加
最新特集【一覧】

 オープンソースデータベースとしては、MySQLが圧倒的な注目を集めている。MySQLは使いやすいデータベースであり、多くのオープンソースウェブアプリケーションはMySQLを使っている。別の主要なオープンソースデータベースとしてPostgreSQLがあり、広く知られてはいるが、MySQLほどのマインドシェアはない。PostgreSQLがMySQLよりも、よりよいセキュリティ、信頼性、データの完全性を提供していることを考えると、これは不幸なことだ。

 しかし、これらの優位点には代償がある。PostgreSQLは設定も利用もやや難しい。PostgreSQLでは、データベース内で提供されるロールと特権に加え、基盤となるOSの特権やセキュリティを活用している。このため、これらの問題について知らない場合、PostgreSQLは使いにくくなる場合がある。ただしこれらのことを知ってしまえば、PostgreSQLはMySQLと同じくらい簡単に使える。

 MySQLと同様に、PostgreSQLも特定のユーザーはデータに対し特定のタイプのアクセス権のみを持つという原則に基づいて動いている。PostgreSQLでは、これらは「ロール」と呼ばれており、CREATE ROLE、ALTER ROLE、DROP ROLEを使って作成と管理を行う。MySQLとは異なり、これらはシステムユーザーと対応させ結びつけることもできるが、これはPostgreSQLでは異なる種類のシステム認証も利用できることを意味している。例えば、identによるサーバ認証、LDAPによるサーバ認証、PAM、Kerberosなどが利用可能だ。ローカル接続では、UNIXドメインソケットに誰がアクセスできるか、どこに置くかということを変更することで、ファイルシステムのパーミッションも利用することができる。

 PostgreSQLではアクセスコントロールの中身はpg_hba.confに記述されている。identによる認証を利用している場合はpg_ident.confも使用され、このファイルはデータベースのユーザーとローカルユーザーを対応させるために使われる。「joe」というユーザーがPostgreSQLのユーザー「joe」と「ecommerce」としてデータベースへのアクセスを許可されている場合、pg_hba.confファイルには次のような内容が含まれる。

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

local   all         all                               ident map=esite

host    all         all         127.0.0.1/32          ident map=esite

 また、pg_identには次のような内容が含まれる。

# MAPNAME     SYSTEM-USERNAME    PG-USERNAME

esite         joe                joe

esite         joe                ecommerce

esite         postgres           joe

 これによって、「joe」というシステムユーザーには、「joe」あるいは「ecommerce」としてのデータベースへのアクセスが許可される。また、「postgres」というシステムユーザーは、データベースの「joe」というユーザーに紐づけられる。さらにこの設定では、pg_ident.confに記述されている通り、対応付けのタイプに「esite」という名称のidentメソッドが使用される。これらの設定ファイルが意味しているのは、ローカルタイプ(UNIXドメインソケット)とローカルのTCP/IPアドレス(127.0.0.1)では、joeとpostgresだけがデータベースに接続できるということだ。ほかのユーザーは、その特権を持たない。

 このidentメソッドは、ローカルユーザーがどのデータベースにアクセスできるかを制御するのに便利だ。このメソッドはローカルホストの接続(TCP/IPあるいはUNIXドメインソケット)にのみ適用でき、リモート接続では利用できない。

 これはMySQLを使っていた人には少し紛らわしく見えるかも知れないが、データベースでこの種のより粒度の細かい認証メカニズムを使いたいという要求が出てくる場合は実際にある。MySQLではログイン認証情報に基づく認証しかサポートしておらず、その認証情報はデータベースそのものに保存され、管理されている。

 PostgreSQLでも、パスワードを利用するMySQLと同様の認証方法を使用することができる。それに加え、パスワードを使わない認証(trust認証)、前述のidentを使った方法、PAM認証(この方法を使うと多くの興味深い認証シナリオが可能になる)、さらにLDAPおよびKerberosの両方を使った認証方法も利用できる。MySQLではかなり前からKerberosのサポートが望まれている(実際、MySQLの2004年11月にオープンしたバグ#6733は、Kerberosのサポートを要望するものだ)。パスワードの保存方法としてKerberosのサポートやLDAPのディレクトリサービスが利用できることは、多くの企業にとって非常に重要で、この点でPostgreSQLは非常に魅力的なデータベースとなっている。

 ほかにも、PostgreSQLを企業に適したものにしている特徴は多くある。セキュリティはもちろん大きな要素だが、PostgreSQLがデータの完全性をサポートしていること、アクセスコントロールの粒度が細かいこと、ACID準拠であること、そしてそのほかの特徴は、PostgreSQLが多くのデータベース管理者に非常に好まれている理由となっている。

この記事は海外CBS Interactive発の記事を朝日インタラクティブが日本向けに編集したものです。原文へ

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