そろそろLDAPにしてみないか?
第5回 今さらだけどLDAPの意義について考えよう
はじめに
著者紹介の写真が変わっていることにお気づきでしょうか? 私事ですが,先月無事に結婚式を挙げることができました。私生活でもバタバタしていたため,本記事の更新が遅れてしまったことをお詫びいたします。
さて,本連載ではこれまでLDAPを使用したいくつかのシステム構築例を挙げてきましたが,皆さんは友人などから「LDAPは認証に使用されることが多いと聞くけど,他にも認証のプロトコルっていろいろあるよね。その中からLDAPを使う理由って何?」と聞かれた場合,うまく質問に答えることができますか?
確かにLDAPとは認証によく使用されるプロトコルです。ファイアウォールやさまざまなネットワーク機器のユーザ設定画面では,外部認証サーバとしてLDAP,TACACS,RADIUSなど複数のメソッドを選択できる場合が多いでしょう。今回は実設定から少し寄り道し,LDAPの意義について考えていくことにしましょう。
外部に認証サーバを置くことの意味
前述のように,さまざまなネットワーク機器やサーバでは,外部認証の機能がサポートされています。認証サーバを別途設けることの意味としては,以下のポイントが挙げられます。
複数ベンダのさまざまな機器を使っていても,ユーザ情報を1ヵ所で集中管理できる
また,情報を集中管理させるためには,メンテナンス性も考慮しなければなりません。認証サーバを置いたところで,その設定が複雑であるなどの理由から,ユーザ追加などのために多大な人的リソースが必要になってしまっては意味がないためです。
また,未だ認証サーバのまったく無い環境に認証サーバを導入する場合,後々認証情報を再利用することを考え汎用性を考慮する必要もあるでしょう。ダイヤルアップサーバ構築のため,数百万円でRADIUSサーバを導入したのは良いが,次に導入したグループウェアはRADIUSをサポートしていないため,グループウェア用の認証サーバを別途立てる,というのはナンセンスです。
柔軟性
TACACSやRADIUSはあくまでも認証サーバという意味合いが強いと言えます。RADIUSの場合,工夫次第では認証に成功したユーザで,なおかつ接続者が特定の電話番号であれば,ダイヤルアップサービスを開始させることはできるでしょうが,LDAPのように検索ベースやフィルタを使って高度な検索結果を得ることはできません。
TACACSやRADIUSの場合,それぞれ仕組みは違えど,端から見れば単なるシンプルな認証サーバです。「単純な認証サービスなのか,認証を含むデータベースサービスなのか」,TACACS/RADIUSとLDAPの違いは,このような言葉でも表すことができます。
LDAPとRDBMS(Relational DataBase Management System)の棲み分け
「LDAPは検索重視のデータベースサービス,RDBMSでも完全に代用できるよね」という考え方のエンジニアもいるかもしれません。
確かにRDBMSの知識が豊富で,そのメリットも十分に熟知している方にとっては,たいていのデータベースはRDBMSで事足り,LDAPの出番は少ないかも知れません。
しかし,認証DBやアドレスDBを作成するために,MySQL/PostgreSQLをインストールし初期設定。新規データベースを作成,次にテーブルを設計し,作成。各データをinsertにて追加していく。
-将来的なメンテナンスを見据えると,これは比較的重い作業だと思いませんか?また,せっかくデータベースを構築したところで,ネットワーク機器がSQL認証をサポートしていなかったり,OutlookやThunderbirdのアドレス帳がSQLに対応していない場合,独自のアプリケーションを作成しなければなりません。
一方LDAPの場合ですが,まずはOpenLDAPなどをインストール。標準的なスキーマは揃っているので,データとなるLDIFを作成しインポートするだけでデータベースが作成できます。標準スキーマにさまざまな項目が定義されているため,一般的な属性を用いるのであれば,DBテーブルのようなものを独自で設計する必要がないのです。ネットワーク機器や多くのアドレス帳もLDAP検索に対応しているため,多様なクライアントから簡単にデータを参照することができます。
少しLDAPを褒めすぎてしまいましたので,たとえばショッピングサイトの顧客DBにLDAPを採用するとどうでしょうか? 通常このようなDBにはRDBMSが採用されています。DB内には顧客テーブルや商品テーブルが存在し,それぞれを連携させて検索や表示を行うのが一般的でしょう。LDAPにはこのリレーショナルという概念が存在しません。
たとえばSQLの場合,
SELECT 項目1,項目2 FROM 顧客テーブル,商品テーブル WHERE ID=ID番号;
というコマンドだけで顧客と商品がリンクされた情報を一覧で得ることができます。LDAPの場合,顧客ツリー,商品ツリーをそれぞれ検索して,それぞれの結びつきに関してはプログラム側で制御しなければなりません。SQL文のようなものが使用できないので,非常に面倒で低速です。ということで,このような場合に無理矢理LDAPを選択するのは間違っています。
参考までに,通常LDAPの実データはBerkeleyDB形式のファイルに格納されるのですが,実データの格納先としてSQLサーバを指定することもできます。こうすることで,LDAP内のデータもその他のデータも全てRDBMS中に格納することができ好都合です。しかしLDAP検索のたびにSQL検索が行われてしまい,通常の環境よりもパフォーマンスが低下してしまうのが問題点と言えます。
今回のまとめ
最初の質問に戻ります。
「LDAPは認証に使用されることが多いと聞くけど,他にも認証のプロトコルっていろいろあるよね。その中からLDAPを使う理由って何?」
漠然としていますが,「(環境次第によって)LDAPのほうがユーザ,アプリケーションにとって都合が良いから」が1つの回答でしょうか。
既存のシステムがRADIUS認証しかサポートしていない,そういった場合はLDAPではなくRADIUSサーバを立てる必要があるでしょう。しかし複数の認証をサポートしている場合は,LDAPを含めたその他の選択肢を考えなければなりません。LDAPとは,認証だけではなくアドレス帳やUNIXアカウントDB,公開鍵,メールシステム用DBなど,さまざまなDBとして用いることができ,将来的にも多様な用途に活用できる可能性があるためです。
設定から離れて寄り道してしまいましたが,次回は再び具体的なソフトウェアの設定を行うことで,LDAPの魅力にさらに迫っていくことにしましょう。


