スキーマと objectClass
LDAP スキーマは、エントリで使える属性、属性値の型、比較方法、objectClass の必須属性・任意属性を定義する。
属性は単なるラベルではない
Section titled “属性は単なるラベルではない”LDAP の属性には、名前だけでなく値のルールがある。
属性定義は主に次のようなことを決める。
| 項目 | 意味 |
|---|---|
| 属性名 | uid、 cn、 uidNumber など |
| 構文 | 文字列、整数、DN、バイナリなど |
| 比較方法 | 大文字小文字を区別するか、完全一致か、部分一致できるか |
| 単一値か複数値か | 1 つだけ持てるか、複数持てるか |
| 用途区分 | ユーザー属性か、ディレクトリ内部の運用属性か |
たとえば uidNumber は人間が勝手に名前を付けた文字列ではなく、POSIX ユーザーの UID として扱うための属性であり、値の型や検索方法もスキーマで定義される。
attribute type の定義自体が「どの objectClass で使えるか」を列挙するわけではない。エントリで使用できる属性は、後述する objectClass の MUST と MAY、および必要に応じて DIT content rule によって決まる。
objectClassは何を決めるか
Section titled “objectClassは何を決めるか”objectClass は、エントリの種類と、そのエントリで必須または任意として使える attribute type の集合を決める。
objectClass は主に次の情報を持つ。
| 項目 | 意味 |
|---|---|
| 必須属性 | その objectClass を使うなら必ず必要な属性 |
| 任意属性 | あってもよい属性 |
| 種類 | STRUCTURAL / AUXILIARY / ABSTRACT |
| 継承関係 | どの objectClass の性質を引き継ぐか |
objectClass: inetOrgPersonobjectClass: posixAccountobjectClass: shadowAccountこれは「人間向けの分類ラベルを 3 つ付けている」だけではない。LDAP サーバーはスキーマに基づいて、必須属性が足りているか、許可されない属性を入れていないか、値の型が正しいかを検査する。
objectClassの種類
Section titled “objectClassの種類”objectClass には大きく 3 種類ある。
| 種類 | 役割 | 例 |
|---|---|---|
| STRUCTURAL | エントリの本体になる種類 | inetOrgPerson、 account、 posixGroup |
| AUXILIARY | STRUCTURAL に追加する属性セット | posixAccount、 shadowAccount |
| ABSTRACT | 直接エントリ本体にはならない抽象的な親 | top |
エントリは基本的に STRUCTURAL objectClass を 1 系統持つ。AUXILIARY は単独ではエントリ本体になれず、STRUCTURAL に追加して使う。
top は LDAP objectClass 階層の基礎になる ABSTRACT objectClass である。
多くの LDIF では次のように明示される。
objectClass: topobjectClass: inetOrgPersontop は「すべてのエントリが共有する最上位の型」と考える。人やグループの実体を表すものではない。
posixAccountが単独で使えない理由
Section titled “posixAccountが単独で使えない理由”posixAccount は POSIX ユーザーとして必要な属性を追加する AUXILIARY objectClass である。
そのため、単独でエントリの本体にはできない。通常は次のように STRUCTURAL objectClass と組み合わせる。
objectClass: inetOrgPersonobjectClass: posixAccountまたは、個人情報をあまり持たせないアカウントでは次のようにする。
objectClass: accountobjectClass: posixAccountinetOrgPersonとaccount
Section titled “inetOrgPersonとaccount”inetOrgPerson は人を表す STRUCTURAL objectClass で、氏名、メールアドレス、電話番号などの属性を扱いやすい。
objectClass: inetOrgPersonobjectClass: posixAccountobjectClass: shadowAccountこの組み合わせは、次の意味になる。
| objectClass | 役割 |
|---|---|
inetOrgPerson |
人としての基本属性を持つ本体 |
posixAccount |
Linux / POSIX ユーザー属性を追加 |
shadowAccount |
パスワード期限・失効関連の属性を追加 |
account はより単純なアカウント用の STRUCTURAL objectClass である。人としての詳細属性が不要なサービスアカウントや教材では、 account + posixAccount で十分な場合がある。
posixGroup
Section titled “posixGroup”posixGroup は POSIX グループを表す STRUCTURAL objectClass である。
dn: cn=developers,ou=groups,dc=example,dc=comobjectClass: posixGroupcn: developersgidNumber: 10000memberUid: ldapuserposixGroup は STRUCTURAL なので、 posixAccount と違って単独でグループエントリの本体になれる。