ユーザー認証によるアクセス制限(データベース認証編):ApacheによるWebサーバ構築(11)(1/2 ページ)
ベーシック認証に続き、今回はデータベースを利用した認証方法について解説する。データベースを利用することにより、メンテナンス性やセキュリティの向上が期待できる。
第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にはこれしか付いてこない。とはいえ、
- PostgreSQL用:mod_auth_pgsql
- MySQL用:mod_auth_mysql
- Oracle用:mod_auth_oracle(mod_auth_ora7、mod_auth_ora8)
といったモジュールも存在している。ただ、Apacheのパッケージには含まれていないというだけである。後は、そのモジュールが信頼に足るものなのかどうか、本当に採用して大丈夫なのか、というところだろう。この点について、筆者が簡単に太鼓判を押すわけにもいかないのだが、次のような理由から心配は無用と考える。
- 著名な Linuxディストリビューションでの採用
Red HatやTurbolinuxなど、著名なLinuxディストリビューションにはこれらのモジュールが含まれている。それだけ利用頻度が高く、信頼できるからだろう。 - 世界中での採用実績
検索サイトで検索してみると分かると思うが、日本だけでも多くの採用実績があり、その情報が公開されている。それは、何にも代え難い実績として、特に日本では重視されるところだろう。 - Apacheモジュールサイトでの公開
http://modules.apache.org/では、Apacheのパッケージに含まれない拡張モジュールが数多く紹介されている。このサイトの検索機能(http://modules.apache.org/search/)を使って、キーワードに「mod_auth」と入力してみれば、いかに多くのモジュールが公開されているか理解できるだろう。 - 実際にインストールして稼働確認ができている
当たり前のことだが、筆者は実際にこれらのモジュールを導入して確認している。大した信頼にはならないかもしれないが、これも1つのポイントとさせていただいた。
本稿では、PostgreSQL用のモジュールを例に解説する。とはいえ、ほかのモジュールも同じくデータベース認証を行うのだから、基本に違いはない。ユーザーデータを登録し、グループデータと関連付け、それをApacheの認証設定に伝える。もちろん若干の違いは存在するが、作業の流れや仕組みが分かってしまえば、それほど重大な問題にはならないだろう。
Copyright © ITmedia, Inc. All Rights Reserved.