4.2. ディレクトリーツリーの設計
- データを含めるための接尾辞を選択する。
- データエントリー間での階層関係を決定する。
- ディレクトリーツリー階層のエントリーに名前を付ける。
4.2.1. 接尾辞の選択
4.2.1.1. 接尾辞の命名規則
- グローバルに一意であること
- 静的であること、したがって、ほとんど変更されないこと。
- ルートディレクトリーの下にあるエントリーが画面で読みやすいように、短いこと
- 入力と覚えておくのが簡単なこと
dc
属性は、ドメイン名をコンポーネント部分に分割することで接尾辞を表します。
dc
ドメイン名のコンポーネントを定義します。c
ISO で定義されている国名を表す 2 桁のコードが含まれます。l
エントリーが配置されている、またはエントリーに関連付けられている国、都市、またはその他の地理的エリアを識別します。st
エントリーが存在する州または地区を識別します。o
エントリーが属する組織の名前を識別します。
4.2.1.2. 複数接尾辞の命名
図4.1 データベースへの複数のディレクトリーツリーの追加
4.2.2. ディレクトリーツリー構造の作成
4.2.2.1. ディレクトリーの分岐
- 企業内の最大下部組織を表すツリーだけを分岐します。このような分岐点は、法務サービス、カスタマーサポート、セールス、エンジニアリングなどの部門に制限する必要があります。ディレクトリーツリーの分岐に使用される部門を一定にいます。企業が頻繁に再編成する場合は、このような分岐は実行しないでください。
- 分岐点には、実際の組織名ではなく、機能または汎用名を使用します。名前の変更サブツリーの名前を変更できますが、多くの子エントリーを持つ大きな接尾辞では、長くリソースを必要とするプロセスになります。組織の機能を表す汎用名(例: Widget Research and Developmentの代わりに Engineering を使用)を使用すると、組織またはプロジェクトの変更後にサブツリーの名前を変更する必要がはるかに低くなります。
- 同様の機能を実行する組織が複数になる場合は、部門をベースに分岐するのではなく、その機能に対して分岐点を 1 つ作成してみてください。たとえば、特定の製品ラインを担当するマーケティング組織が複数存在する場合でも、ou=Marketing サブツリーを 1 つ作成します。すべてのマーケティングエントリーはそのツリーに属します。
エンタープライズ環境における分岐
ディレクトリーツリー構造が変更されない情報に基づいている場合、名前の変更は回避できます。たとえば、組織ではなくツリー内のオブジェクトのタイプを構造のベースとします。これは、組織ユニット間でエントリーをシャッフルするのを回避するのに役立ちます。シャッフルする場合、コストのかかる操作である識別名 (DN) の変更が必要になります。
- ou=people
- ou=groups
- ou=services
図4.2 環境ディレクトリーツリーの例
ホスト環境でのブランチング
ホスト環境の場合は、ルート接尾辞の下に、オブジェクトクラス organization
o
の 2 つのエントリーとオブジェクトクラスの 1 つのエントリーを含むツリーを作成します。organizationalUnit
ou
たとえば、Example ISP は、ディレクトリーを以下のように分岐します。
図4.3 ホストディレクトリーツリーの例
4.2.2.2. 分岐点の特定
図4.4 Example Corp のディレクトリーツリー
図4.5 Example ISP のディレクトリーツリー
- 一貫性を持たせる必要があります。ディレクトリーツリー全体で識別名 (DN) 形式に一貫性がない場合、一部の LDAP クライアントアプリケーションは混同する可能性があります。つまり、ディレクトリーツリーの 1 つで
l
がou
に従属する場合、ディレクトリーサービスの他の部分でl
がou
に従属するようにします。 - 従来の属性 (「分岐点の特定」に示す) のみの使用を試みます。従来の属性を使用すると、サードパーティーの LDAP クライアントアプリケーションとの互換性を維持する可能性が高まります。従来の属性を使用すれば、デフォルトのディレクトリースキーマに認識されるため、ブランチ DN のエントリーの構築が容易になります。
表4.1 従来の DN 分岐点属性
属性 | 定義 |
---|---|
dc | dc=example などのドメイン名の要素。これは、dc=example,dc=com や dc= mtv, dc=example,dc=com など、ドメインに応じてペアまたはそれ以上で指定されます。 |
c | 国名。 |
o | 組織名。この属性は、通常、「接尾辞の命名規則」のように、企業の部門、学問 (人間、サイエンス)、子会社、または企業内のその他の主要なブランチなど、大規模な部門の分岐を表すために使用されます。 |
ou | 組織単位。この属性は、通常、組織よりも小さな企業部門のブランチを表すために使用されます。通常、組織単位は前述の組織に従属します。 |
st | 州または地区名。 |
l または、以下を実行します。 locality | 都市、国、オフィス、またはファシリティー名などのローカリティー。 |
4.2.2.3. レプリケーションに関する考慮事項
図4.6 Example Corp. のディレクトリーツリーの初期分岐
図4.7 Example Corp. の拡張ブランチ
図4.8 Example ISP のディレクトリーの分岐
図4.9 Example ISP の拡張ブランチ
4.2.2.4. アクセス制御に関する考慮事項
4.2.3. エントリーの命名
- 命名用に選択される属性は、変更されてないけません。
- この名前は、ディレクトリー全体で一意でなければなりません。一意の名前により、DN は最大でも 1 つのディレクトリー内のエントリーを確認できるようになります。
l
を使用しないでください。また、組織単位を表すのに c
を使用しないでください。
4.2.3.1. 人物エントリーの命名
commonName
または cn
属性を使用して人物エントリーに名前を付けます。つまり、Babs Jensen という名前のユーザーのエントリーは、cn=Babs Jensen,dc=example,dc=com の識別名になります。
cn
以外の属性を持つ個人のエントリーを特定することです。以下の属性のいずれかを使用することを検討してください。
uid
uid
属性を使用して、個人の一意の値を指定します。可能性としては、ユーザーログイン ID または従業員番号が含まれます。ホスト環境のサブスクライバーは、uid
属性で識別する必要があります。mail
mail
属性には、常に一意のユーザーのメールアドレスが含まれます。このオプションを使用すると、重複した属性値(例: mail=bjensen@example.com,dc=example,dc=com)を含む awkward DN が発生する可能性があるため、uid
属性で使用する他の一意の値がない場合に限りこのオプションを使用します。たとえば、企業が一時的または契約社員に従業員番号やユーザー ID を割り当てない場合は、mail
属性の代わりにuid
属性を使用します。employeeNumber
inetOrgPerson オブジェクトクラスの従業員の場合は、employeeNumber
などの勤務担当者が割り当てた属性値を使用することを検討してください。
uid
および cn
属性に人間が判読できる名前が使用されることを想定しています。
ホストされる環境の人物エントリーに関する考慮事項
人物がサービスへのサブスクライバーである場合、エントリーはオブジェクトクラス inetUser になり、エントリーに uid
属性が含まれている必要があります。属性は、顧客サブツリー内で一意である必要があります。
DIT への人物エントリーの配置
以下は、ディレクトリーツリーに人物エントリーを配置するためのガイドラインです。
- エンタープライズ内のユーザーは、組織のエントリー下のディレクトリーツリーに置く必要があります。
- ホスティング組織をお持ちのお客様は、ホストされた組織の ou=people ブランチの下になければなりません。
4.2.3.2. グループエントリーの命名
- 静的グループ は、明示的にメンバーを定義します。groupOfNames または groupOfUniqueNames オブジェクトクラスには、グループのメンバーに名前を付ける値が含まれます。静的グループは、ディレクトリー管理者のグループなど、メンバーの少ないグループに適しています。静的グループは、数千のメンバーを持つグループには適していません。uniqueMember は groupOfUniqueNames オブジェクトの必須の属性であるため、静的グループエントリーには uniqueMember 属性値が含まれている必要があります。このオブジェクトクラスは、グループエントリーの DN を形成するために使用できる
cn
属性を必要とします。 - 動的グループ は、検索フィルターとサブツリーを含むグループを表すエントリーを使用します。フィルターにマッチするエントリーはグループのメンバーです。
- ロール は、静的グループおよび動的グループの概念を統一します。詳細は、「ディレクトリーエントリーのグループ化」を参照してください。
4.2.3.3. 組織エントリーの命名
organization
(o
)属性を命名属性として使用します。
4.2.3.4. その他の種類のエントリーの命名
cn
属性を使用します。次に、グループエントリーに名前を付けるために、cn=administrators,dc=example,dc=com のように名前を付けます。
commonName
属性をサポートしない場合があります。代わりに、エントリーのオブジェクトクラスがサポートする属性を使用します。
4.2.4. エントリーおよびサブツリーの名前変更
例4.1 エントリー DN のビルド
dc=example,dc=com => root suffix ou=People,dc=example,dc=com => org unit st=California,ou=People,dc=example,dc=com => state/province l=Mountain View,st=California,ou=People,dc=example,dc=com => city ou=Engineering,l=Mountain View,st=California,ou=People,dc=example,dc=com => org unit uid=jsmith,ou=Engineering,l=Mountain View,st=California,ou=People,dc=example,dc=com => leaf entry
図4.10 リーフエントリーに対する modrdn 操作
図4.11 サブツリーエントリーに対する modrdn 操作
newsuperior
属性を設定して、エントリーを別の親に移動します。
図4.12 新しい親エントリーに対する modrdn 操作
entryrdn.db
インデックスに保存される方法が原因で、新しい上位操作とサブツリーの名前変更操作の両方が可能です。各エントリーは、独自のキー (自己リンク) で、続いてその親 (親リンク) と子を特定するサブキーで識別されます。これには、親と子をエントリーに対する属性として処理することでディレクトリーツリー階層を配置する形式があり、すべてのエントリーが完全な DN ではなく一意の ID とその RDN によって記述されます。
numeric_id:RDN => self link ID: #; RDN: "rdn"; NRDN: normalized_rdn P#:RDN => parent link ID: #; RDN: "rdn"; NRDN: normalized_rdn C#:RDN => child link ID: #; RDN: "rdn"; NRDN: normalized_rdn
4:ou=people ID: 4; RDN: "ou=People"; NRDN: "ou=people" P4:ou=people ID: 1; RDN: "dc=example,dc=com"; NRDN: "dc=example,dc=com" C4:ou=people ID: 10; RDN: "uid=jsmith"; NRDN: "uid=jsmith"
- root 接尾辞の名前を変更することはできません。
- サブツリー名前変更操作によるレプリケーションへの影響は最小限に抑えられます。レプリカ合意は、データベースのサブツリーではなく、データベース全体に適用されます。したがって、サブツリーの名前変更操作ではレプリカ合意の再設定は必要ありません。サブツリーの名前変更操作後のすべての名前の変更は、通常どおり複製されます。
- サブツリーの名前を変更し、同期合意を再設定する必要がある 場合があります。同期合意は、接尾辞またはサブツリーレベルで設定されるため、サブツリーの名前を変更すると、同期が破損してしまう可能性があります。
- サブツリーの名前を変更するには、サブツリーに設定されたサブツリーレベルの ACI を手動で再設定し、サブツリーの子エントリーに設定されたエントリーレベルの ACI (エントリーレベルの ACI) を手動で再設定する 必要があります。
- 子を持つサブツリーの名前を変更できますが、子を持つサブツリーを削除できません。
ou
からdc
への移行など、サブツリーのコンポーネントを変更しようとすると、スキーマ違反で失敗する可能性があります。たとえば、organizationalUnit オブジェクトクラスにはou
属性が必要です。サブツリーの名前変更の一部としてその属性を削除すると、操作は失敗します。