ディレクトリのオブジェクト クラスおよびオブジェクト クラス識別子

オブジェクト クラスはエントリの属性です。どの属性をエントリに含められるかを指定します。
cad141jp
オブジェクト クラスはエントリの属性です。どの属性をエントリに含められるかを指定します。
オブジェクト クラス識別子は、オブジェクト クラスを識別する一意の値です。
オブジェクト クラスを定義するには、そのオブジェクト識別子、名前、代替名、サブクラス、オブジェクト クラスの種類、must-contain のリスト、may-contain 属性または属性セットのリスト、および説明を指定します。
例: オブジェクト クラス定義
set object-class 1.3.6.1.4.5 = { name = organizationalUnit subclass-of top kind = structural must-contain organizationalUnitName may-contain organizationalAttributeSet description = "X.500 Organizational Unit Object Class" };
この記事では、以下のトピックについて説明します。
2
オブジェクト クラスの種類
X.500/LDAP 標準は、以下の 3 つの種類のオブジェクト クラスを定義します。
  • 抽象型クラス(たとえば、オブジェクト クラス top)
  • 構造型クラス(たとえば、オブジェクト クラス inetOrgPerson)
  • 補助型クラス
オブジェクト クラスの種類を定義しない場合、オブジェクト クラスが top を継承すると、DSA はそれを構造型のクラスであると見なします。それ以外の場合、DSA はそれを補助型と見なします。
抽象型クラス
抽象型オブジェクト クラスは、LDAP ディレクトリの構造を決定します。オブジェクト クラス
top
は、たとえば、すべての構造型オブジェクト クラスの派生元のルート オブジェクト クラスです。1 つの必須属性、
objectClass
が含まれます。また、すべてのエントリがその属性を継承するので、オブジェクト クラスによって確実にこれらのエントリが定義されます。
抽象型オブジェクト クラスはエントリ内にスタンドアロンで存在できません。エントリには構造型オブジェクト クラスも含まれている必要があります。
構造型クラス
ディレクトリ内のほとんどのオブジェクト クラスは、エントリが何なのかを定義するため構造型です。また、それらは、その下に格納されるエントリにルールを強制します。たとえば、オブジェクト クラス
organization
(o)は、その下に格納されるすべてのオブジェクトがオブジェクト クラス
organizationalUnit
(ou)に属すことを要求する場合があります。構造型オブジェクト クラスの他の例として、
groupOfNames
inetOrgPerson
person
があります。
補助型クラス
エントリは 1 つの構造型オブジェクト クラスのみに属します。ただし、エントリは、1 つ以上の補助型オブジェクト クラスに属すこともできます。補助型オブジェクト クラスは、構造型オブジェクト クラスによってすでに定義されているエントリに属性を追加します。補助型オブジェクト クラスはエントリ内にスタンドアロンで存在できません。エントリには構造型オブジェクト クラスが含まれている必要があります。構造型オブジェクト クラスと異なり、補助型オブジェクト クラスは、エントリの格納上の制限を与えません。
オブジェクト クラスの確認
エントリを追加するときには、DSA は必須属性(must-contain)など新しいエントリのオブジェクト クラスのすべてのスーパークラスからの属性をサポートします。
以下に例を示します。
オブジェクト クラス inetOrgPerson のエントリを追加するときには、must-contain および may-contain の属性リストは以下のクラスを含めてすべてのスーパークラスから継承されます。
top
must-contain: objectClass
person
(subclass of top) must-contain: commonName, surname may-contain: description, seeAlso, telephoneNumber, userPassword
organizationalPerson
(subclass of person) may-contain: localeAttributeSet, ou, postalAttributeSet, telecommunicationAttributeSet, title
カスタム オブジェクト クラスを作成するときには、継承を考慮する必要があります。
オブジェクト クラスの格納
すべてのエントリには属性
object class
があります。通常この属性には、
organization
locality
top
など複数の値があります。
OC 属性の格納方法の設定
オブジェクト クラス属性(単一値または複数値)のディレクトリへの格納方法を設定できます。
デフォルトでは、DSA は、LDAP または DSA 追加リクエストで指定されているとおりにエントリにオブジェクト クラスを追加します(たとえば、オブジェクト クラス属性には複数の OID がある場合があります)。ただし、オブジェクト クラス属性に単一値のみ(調整された OC の OID)が含まれていると、ディレクトリのパフォーマンスが若干向上します。ただし、これは属性のオブジェクト クラス設計に対して大きく影響しません。
エントリに、継承された 1 つのオブジェクト クラスが含まれ、そのすべての上位オブジェクト クラス(その OC OID)が明示的にリストされる場合は、上位オブジェクト クラスを削除して、最下位レベルのオブジェクト クラスを階層内に 1 つの OID 値として残すことができます。同様に、エントリが返されるときに、すべての上位オブジェクト クラス属が含まれるように、オブジェクト クラス属性を DSA によって自動的に変更できます。
ディレクトリがその内部スキーマ管理制御システムで設定されたオブジェクト クラス構造ルールを保持するので、この OC 調整情報は OC OID として返すことができます。
たとえば、ディレクトリに人に対応するエントリが含まれる場合、それぞれのエントリには明示的にデータ ストア内の以下のオブジェクト クラスを含めることができます。
  • inetOrgPerson
  • organizationalPerson
  • Person
  • top
オブジェクト クラスの枝刈りとリプレイス
エントリを作成するときには最下位(
inetOrgPerson
)を除いて継承されたすべてのオブジェクト クラスを破棄して、クライアント検索結果としてエントリを返すときにはすべての上位オブジェクト クラス(
organizationalPerson
Person
top
)を置換するように、DSA を設定するとスペース効率が向上します。
以下のブールの設定では、オブジェクト クラスの枝刈りとリプレイスが制御されます。
  • set prune-oc-parents
    新しいエントリを作成するときに、冗長な上位オブジェクト クラスを削除します。
  • set return-oc-parents
    クライアントに返されるエントリに上位オブジェクト クラスをリプレイスします。
  • set add-oc-parents
    エントリを追加するときに、親オブジェクト クラスを追加します。たとえば、以下のクラスで Democorp エントリを追加することを考慮します。
    • inetOrgPerson
    このコントロールは親クラスをすべて追加します。その結果、エントリで以下のクラスが保持されます。
    • top
    • person
    • organizationalPerson
    • inetOrgPerson
prune-oc-parents または return-oc-parents が設定されているときに、オブジェクト クラス フィルタ(たとえば、
oc=Person
)を使用してエントリを検索すると、エントリは返されません。これは、指定されたオブジェクト クラスの Person がデータに存在しないので、inetOrgPerson オブジェクト クラスが含まれる検索結果のみに追加されるためです。
構造型オブジェクト クラスの確認
デフォルトでは、CA Directory で、1 つの継承チェーンの一部でない複数の構造型オブジェクト クラスでエントリを作成できます。この機能には有用性を期待できる場合がありますが、X.501 のセクション 8.3.2 および RFC 451 のセクション 2.4.2 に準拠していません。
関連のない複数の構造型オブジェクト クラスでエントリを作成しない場合は、
set check-structural-oc
コマンドを使用して、これを強制できます。
set check-structural-oc
true
に設定されていると、2 つ以上の構造型オブジェクト クラス階層を持つエントリを追加できません。