非エンジニアのエンジニア道

非エンジニアからエンジニアに転向!その勉強の軌跡を載せていきます。

LDAPとは

わからない用語がふと出てきたので、調べた。

LDAPとは

Lightweight Directory Access Protocol
TCP/IP上で動作するインターネット標準の、ディレクトリサービスへアクセスするためのプロトコル
WebブラウザなどのLDAPクライアントから、直接、ディレクトリサービスを検索・参照することができる

ディレクトリサービスとは

LANなどのコンピュータネットワーク上にあるユーザ情報、接続されているプリンターなどの資源を記憶し、検索しやすいようにまとめたもの。

ディレクトリ構造について

ディレクトリは基本単位であるエントリをツリー上に配置して構成する
ディレクトリは複数のオブジェクトについての情報を格納する
LDAPのエントリはオブジェクトを表現する属性情報の集合で、複数のオブジェクトを粒度に合わせてツリー上に整理する
オブジェクトに該当するものは人物やアカウント・プリンタ等の資源

ディレクトリデータベースについて

DIT Directory Information Tree
エントリの階層構造を表したもの。ディレクトリ情報ツリー。
DIB Directory Information Base
それを格納したデータベース。ディレクトリ情報ベース。

エントリとは

オブジェクトを格納するデータ構造
エントリは属性の集合であり、属性は属性名と内容の組で、一つの属性は複数の値を持つことがある
エントリはRDBではレコードに相当する

エントリの構造

各エントリが何を表現しようとしているかを決めるのが オブジェクトクラス (objectClass) という属性
エントリが何のオブジェクトクラスを持っているかによって、そのエントリが持てる属性が決まる
複数のエントリが同一の親エントリ配下にいたとしても、兄弟関係にあるエントリ間で保持可能な属性が異なる場合があるというのが、RDBのレコードと決定的に違う特徴の一つ

ディレクトリサービスを利用する

プログラムでは処理対象とするエントリを特定する必要がある

データ形式

LDIF LDAP Data Interchange Format
このファイル(テキストファイル)でやりとりをする

dn: <識別名>
<属性記述子>: <属性値>
<属性記述子>: <属性値>
<空行>  ← エントリの区切り
dn: <識別名>

エントリの識別

RDN Relative Distinguished Name
親を基準とした位置を示す名前をRDN
DIT上の各エントリは親エントリから見た際に一意に識別可能な名前を付けることで、親エントリを基準とした位置が確定できる
通常はエントリ自身のいずれかの属性名をRDNとする

DN Distinguished Name
該当するエントリを一意に特定するための手段
そのオブジェクトを表すエントリおよびその上位エントリのRDNの列として定義されたもの

DNの書き方

複数のRDNをカンマ記号でつなぎ合わせて記述したもので、上位のRDNほど右側に位置する

検索について

LDAPではDITのエントリを検索するためにフィルタという構文(syntax)を利用する
RDBでフィルタは、SELECT文のWHERE句に相当する

動作について

LDAPサーバはDITを公開し、TCP/IP 経由でクライアントからのリクエストを受け付け、クライアントにその結果を返すLDAPサーバがクライアントからの接続を待ち受けるポート番号として、389(非 over SSL/TLS あるいは STARTTLS)と636(over SSL/TLS)が使用される

RDBとの違い

用途

LDAPは、検索性能重視頻繁な更新には向かない。
RDBは、検索だけでなく頻繁な更新も重視する

構造

LDAPはツリー構造で、RDBはテーブル構造
LDAPは、ディレクトリによるグルーピングを基礎とした構成となるため、管理の委任がしやすい
目的の情報がグルーピングされたディレクトリだけを指定して検索をするため、検索自体のパフォーマンスが有利

その他

リレーショナルデータベースでは、テキストベースのデータのほかバイナリベースのデータも同様に扱うが、LDAPでは主にテキストベースのデータを扱うため、処理の負荷が少なくパフォーマンスが向上する傾向にある

LDAPはディレクトリ検索のためのプロトコルとして、氏名や電話番号、メールアドレスといった基本的な属性が最初から定義されているため、リレーショナルデータベースのように自分で定義する必要がない。