コンテンツにスキップ

スキーマと objectClass

LDAP スキーマは、エントリで使える属性、属性値の型、比較方法、objectClass の必須属性・任意属性を定義する。


LDAP の属性には、名前だけでなく値のルールがある。

属性定義は主に次のようなことを決める。

項目 意味
属性名 uid、 cn、 uidNumber など
構文 文字列、整数、DN、バイナリなど
比較方法 大文字小文字を区別するか、完全一致か、部分一致できるか
単一値か複数値か 1 つだけ持てるか、複数持てるか
用途区分 ユーザー属性か、ディレクトリ内部の運用属性か

たとえば uidNumber は人間が勝手に名前を付けた文字列ではなく、POSIX ユーザーの UID として扱うための属性であり、値の型や検索方法もスキーマで定義される。

attribute type の定義自体が「どの objectClass で使えるか」を列挙するわけではない。エントリで使用できる属性は、後述する objectClass の MUST と MAY、および必要に応じて DIT content rule によって決まる。


objectClass は、エントリの種類と、そのエントリで必須または任意として使える attribute type の集合を決める。

objectClass は主に次の情報を持つ。

項目 意味
必須属性 その objectClass を使うなら必ず必要な属性
任意属性 あってもよい属性
種類 STRUCTURAL / AUXILIARY / ABSTRACT
継承関係 どの objectClass の性質を引き継ぐか
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount

これは「人間向けの分類ラベルを 3 つ付けている」だけではない。LDAP サーバーはスキーマに基づいて、必須属性が足りているか、許可されない属性を入れていないか、値の型が正しいかを検査する。


objectClass には大きく 3 種類ある。

種類 役割 例
STRUCTURAL エントリの本体になる種類 inetOrgPerson、 account、 posixGroup
AUXILIARY STRUCTURAL に追加する属性セット posixAccount、 shadowAccount
ABSTRACT 直接エントリ本体にはならない抽象的な親 top

エントリは基本的に STRUCTURAL objectClass を 1 系統持つ。AUXILIARY は単独ではエントリ本体になれず、STRUCTURAL に追加して使う。


top は LDAP objectClass 階層の基礎になる ABSTRACT objectClass である。

多くの LDIF では次のように明示される。

objectClass: top
objectClass: inetOrgPerson

top は「すべてのエントリが共有する最上位の型」と考える。人やグループの実体を表すものではない。


posixAccountが単独で使えない理由

Section titled “posixAccountが単独で使えない理由”

posixAccount は POSIX ユーザーとして必要な属性を追加する AUXILIARY objectClass である。

そのため、単独でエントリの本体にはできない。通常は次のように STRUCTURAL objectClass と組み合わせる。

objectClass: inetOrgPerson
objectClass: posixAccount

または、個人情報をあまり持たせないアカウントでは次のようにする。

objectClass: account
objectClass: posixAccount

inetOrgPerson は人を表す STRUCTURAL objectClass で、氏名、メールアドレス、電話番号などの属性を扱いやすい。

objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount

この組み合わせは、次の意味になる。

objectClass 役割
inetOrgPerson 人としての基本属性を持つ本体
posixAccount Linux / POSIX ユーザー属性を追加
shadowAccount パスワード期限・失効関連の属性を追加

account はより単純なアカウント用の STRUCTURAL objectClass である。人としての詳細属性が不要なサービスアカウントや教材では、 account + posixAccount で十分な場合がある。


posixGroup は POSIX グループを表す STRUCTURAL objectClass である。

dn: cn=developers,ou=groups,dc=example,dc=com
objectClass: posixGroup
cn: developers
gidNumber: 10000
memberUid: ldapuser

posixGroup は STRUCTURAL なので、 posixAccount と違って単独でグループエントリの本体になれる。



  • RFC 4512 LDAP のスキーマ、属性型、objectClass、STRUCTURAL / AUXILIARY / ABSTRACT の定義。

  • RFC 2307 posixAccount、 shadowAccount、 posixGroup などの POSIX 向けスキーマ。