ベーシック認証に続き、今回はデータベースを利用した認証方法について解説する。データベースを利用することにより、メンテナンス性やセキュリティの向上が期待できる。
第9回、第10回と紹介してきたWebページの閲覧制限方法も今回が最後となる。最後に紹介する方法は、データベースを使った認証である。データベースを使うといっても、見た目には前回紹介したベーシック認証と変わりはない。
データベース認証とベーシック認証の違いは、コンテンツの閲覧を許可するユーザーの管理をパスワードファイルで行うかデータベースで行うか、という点にある。ユーザーの管理をデータベースで行う利点としては、次の2つが挙げられる。
データベースに格納されたデータは、SQLを使って簡単にメンテナンスできる。htpasswdコマンドでユーザーを管理するのは、追加するのも更新するのも面倒だ。数人ならともかく、何百人ものユーザーをコマンドとファイル操作で管理し、さらにグループまで作成するとなると、正確にメンテナンスするのは不可能に近い。
また、データベースであればPHPやJava、Perlなどを使ったアプリケーションも作りやすい。ユーザーのデータを管理するテーブルを操作するアプリケーションを作ってしまえば、Webブラウザなどで簡単にメンテナンスできるようになるだろう。セキュリティにさえ注意すれば、ユーザー側でパスワードを変更するアプリケーションも容易に作成できるから、管理者はパスワード変更の手間からも解放される。
さらに、社員データベースや顧客データベースなど、ほかのデータベースからデータを移行しやすいこともメリットとなる。たいていの場合、企業はすでにそうしたデータを持っている。社内イントラネットなら社員データベースのデータが使えるし、特定顧客向けのWebサイトなら顧客データベースのデータが使えるだろう。
こうしたデータはSQLを使って移し替えてもいいし、CSV形式のファイルなどを通して取り込んでもいい。定期的に同期も取れるようになれば、メンテナンスの手間は大幅に軽減されるはずだ。もちろん、やりようによってはそのまま使ってしまうことだってできてしまう。
htpasswdによって作成されるパスワードファイルは、前回も説明したとおり単なるテキストファイルである。パスワードの部分こそ暗号化されているが、ユーザー名やグループについてはそのままの形で記録されている。これが何かの間違いで外部に漏れれば、ユーザーの数やユーザー名、所属グループは簡単に把握されてしまう。もし相手が高度な技術者であれば、暗号化されたパスワードを復号してしまう可能性もある。
データベースのファイルは、それだけを入手しても簡単に中身を見ることはできない。暗号化されたパスワードを破る技術があれば、データベースの中身を見ることもできてしまうかもしれないが……。
危険性を完全に排除することはできないが、単純なテキストファイルを置いておくよりは安全であろう。適切に権限を設定していれば、データベースのファイルを読み取られること自体、そう簡単なことではない。インストールや設定はパスワードファイルを使う場合より多少ややこしいものの、メリットの大きさを考えればデータベース認証を積極的に採用するべきだろう。
それでは、データベース認証に利用できるデータベースを紹介しよう。データベースなら何でもよいのか、というとそういうわけにはいかないからである。データベース認証を行うには、そのデータベースに対応したApacheのモジュールが必要になるのだ。
モジュールは「mod_auth_xxxx」といった名前が付けられていて、xxxxの部分がデータベースによって異なる。例えば、Apacheのパッケージには「mod_auth_db」というモジュールが含まれている。これは、「Berkeley DB」と連携してデータベース認証を行うモジュールである。
Berkeley DBは日本ではなじみが薄いが、Apacheにはこれしか付いてこない。とはいえ、
といったモジュールも存在している。ただ、Apacheのパッケージには含まれていないというだけである。後は、そのモジュールが信頼に足るものなのかどうか、本当に採用して大丈夫なのか、というところだろう。この点について、筆者が簡単に太鼓判を押すわけにもいかないのだが、次のような理由から心配は無用と考える。
本稿では、PostgreSQL用のモジュールを例に解説する。とはいえ、ほかのモジュールも同じくデータベース認証を行うのだから、基本に違いはない。ユーザーデータを登録し、グループデータと関連付け、それをApacheの認証設定に伝える。もちろん若干の違いは存在するが、作業の流れや仕組みが分かってしまえば、それほど重大な問題にはならないだろう。
Copyright © ITmedia, Inc. All Rights Reserved.