ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Directory Server Enterprise Edition管理者ガイド
11g リリース1 (11.1.1.7.0)
B72439-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

9 Directory Serverのグループ、ロールおよびCoS

ディレクトリのデータ階層構造を超えて、ユーザーを表すエントリの管理では、共通の属性値を共有するグループの作成が必要になることが多くあります。Directory Serverでは、グループ、ロールおよびサービス・クラス(CoS)による高度なエントリ管理機能を用意しています。

この章の内容は、次のとおりです。

9.1 グループ、ロールおよびサービス・クラスについて

グループ、ロールおよびCoSは、次のように定義されます。

Directory Serverは、ロール、グループおよびCoSの算出属性の値に基づいて検索を実行する機能を備えています。操作で使用するフィルタ文字列には、nsRole属性またはCoS定義で生成された任意の属性を含めることができます。フィルタ文字列を使用して、この属性の値の比較操作も実行できます。ただし、CoSの演算属性の索引は作成できません。したがって、CoSで生成された属性を含む検索では、時間およびメモリーの面で、リソースを大量に消費する場合があります。

ロール、グループおよびCoSにより提供される機能を十分に活用するには、ディレクトリ・デプロイメントの計画段階でグループ化の戦略を決定します。これらの機能の説明およびこれらによってトポロジを簡素化する方法については、Oracle Directory Server Enterprise Editionのリファレンスの第11章のDirectory Serverのグループとロールについての章を参照してください。

ロールとグループの仕組みをより深く理解するためには、Oracle Directory Server Enterprise Editionのリファレンスの第11章Directory Serverのグループとロールについての章を参照してください。CoSの詳細は、Oracle Directory Server Enterprise Editionのリファレンスの第12章のDirectory Serverのサービス・クラスについての章を参照してください。

9.2 グループの管理

グループによってエントリを関連付けて管理を容易にできます。たとえば、グループを使用すると、アクセス制御命令(ACI)の定義が簡単になります。グループ定義は、静的リストのメンバーに名前を付けるか、動的エントリ・セットを定義するフィルタを提供する特別なエントリです。

グループに含めることができるメンバーの範囲は、グループ定義エントリの配置場所とは無関係に、ディレクトリ全体となります。管理を簡素化するために、通常グループ定義エントリはすべて1か所に格納されます。通常は、ルート接尾辞の下のou=Groupsに格納されます。

グループには、静的グループおよび動的グループの2種類があります。

9.2.1 新しい静的グループを作成するには

このタスクの実行には、DSCCを使用できません。次の手順の説明に従って、コマンドラインを使用してください。

  1. ldapmodifyコマンドを使用して、新しい静的グループを作成します。

    たとえば、System Administratorsという新しい静的グループを作成して、メンバーをいくつか追加するには、次のコマンドを使用できます。

    $ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
    dn: cn=System Administrators, ou=Groups, dc=example,dc=com
    changetype: add
    cn: System Administrators
    objectclass: top
    objectclass: groupOfNames
    ou: Groups
    member: uid=kvaughan, ou=People, dc=example,dc=com
    member: uid=rdaugherty, ou=People, dc=example,dc=com
    member: uid=hmiller, ou=People, dc=example,dc=com
    
  2. 新しいグループが作成され、かつメンバーが追加されたことを確認します。

    たとえば、新しいSystem AdministratorsグループにKirsten Vaughanが含まれていることを確認するには、次を入力します。

    $ ldapsearch -b "dc=example,dc=com" uid=kvaughan isMemberOf
    uid=kvaughan,ou=People,dc=example,dc=com
    isMemberOf: cn=System Administrators, ou=Groups, dc=example,dc=com 
    isMemberOf: cn=HR Managers,ou=groups,dc=example,dc=com
    

9.2.2 新しい動的グループを作成するには

このタスクの実行には、DSCCを使用できません。次の手順の説明に従って、コマンドラインを使用してください。

ldapmodifyコマンドを使用して、新しい動的グループを作成します。

たとえば3rd Floorという新しい動的グループ(部屋番号が3で始まる部屋の全従業員が含まれる)を作成するには、次のコマンドを使用できます。

$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=3rd Floor, ou=Groups, dc=example,dc=com
changetype: add
cn: 3rd Floor
objectclass: top
objectclass: groupOfUrls
ou: Groups
memberURL: ldap:///dc=example,dc=com??sub?(roomnumber=3*)

9.3 ロールの管理

ロールは、より効率的かつ簡単なアプリケーションの使用を目的に設計された代替のグループ化メカニズムです。ロールの定義および管理はグループと同様ですが、各メンバー・エントリに生成されるロール属性は自動的にエントリのロールを示します。たとえば、アプリケーションではグループの選択およびメンバー・リストの参照を必要とせずに、エントリのロールの読込みが可能となります。

デフォルトでは、ロールの範囲は、範囲が定義されているサブツリーに制限されます。しかし、ネストされたロールの範囲は拡張できます。他のサブツリーにあるロールをネストしたり、ディレクトリの任意の場所のメンバーを含めることもできます。詳細は、「ロールの範囲を拡張するには:」および「ネストされたロール定義の例」を参照してください。

この項では、ロールのセキュアな使用方法、およびコマンドラインからのロールの管理方法を説明します。

9.3.1 ロールのセキュアな使用方法

ロールをセキュアに使用するために、アクセス制御命令(ACI)を設定して、該当する属性を保護する必要があります。たとえば、ユーザーAが管理対象ロールであるMRを所有するとします。管理対象ロールは静的グループに相当するもので、nsRoleDN属性を各メンバー・エントリに追加することで、明示的にロールをそれらのエントリに割り当てます。MRロールは、コマンドラインによるアカウントの非アクティブ化を使用してロックされています。これは、ユーザーAはサーバーにバインドできないことを意味します(このユーザーに対してnsAccountLock属性がtrueとして計算されるため)。ただし、このユーザーはすでにバインド済で、現在はMRロールによりロックされていると通知されたものとします。このユーザーがnsRoleDN属性に書込みアクセスできないようにするためのACIが存在しない場合、このユーザーはnsRoleDN属性を自分のエントリから削除して、自身のロックを解除できます。

ユーザーによるnsRoleDN属性の削除を防止するには、ACIを適用する必要があります。フィルタ処理されたロールでは、属性変更によりユーザーがフィルタ処理されたロールを放棄できないよう、フィルタを一部保護する必要があります。フィルタ処理されたロールで使用する属性をユーザーが追加、削除および変更できないようにする必要があります。フィルタ属性値の計算の場合も同様に、フィルタ属性値の変更が可能な属性はすべて保護する必要があります。ネストされたロールにはフィルタ処理されたロールおよび管理対象ロールを含むことができるので、ネストされたロールに含まれる各ロールについても前述の事項を考慮する必要があります。

セキュリティに対するACI設定の詳細な手順は、第6章「Directory Serverのアクセス制御」を参照してください。

9.3.2 コマンドラインからのロールの管理

ロールは、コマンドライン・ユーティリティによりディレクトリ管理者がアクセス可能なエントリで定義されます。ロールを作成した後、次のようにメンバーをロールに割り当てます。

  • 管理対象ロールのメンバーは各自のエントリにnsRoleDN属性を持ちます。

  • フィルタ処理されたロールのメンバーは、nsRoleFilter属性で指定するフィルタと一致するエントリとなります。

  • ネストされたロールのメンバーは、ネストされたロール定義エントリのnsRoleDN属性で指定するロールのメンバーとなります。

すべてのロール定義はLDAPsubentryおよびnsRoleDefinitionオブジェクト・クラスから継承されます。次の例では、各タイプのロールに固有の追加オブジェクト・クラスと関連付けられた属性を示します。

9.3.2.1 管理対象ロール定義の例

すべてのマーケティング・スタッフのロールを作成するには、次のようにldapmodifyコマンドを使用します。

$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=Marketing,ou=marketing,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: nsRoleDefinition
objectclass: nsSimpleRoleDefinition
objectclass: nsManagedRoleDefinition
cn: Marketing
description: managed role for marketing staff

nsManagedRoleDefinitionオブジェクト・クラスは、LDAPsubentrynsRoleDefinitionおよびnsSimpleRoleDefinitionオブジェクト・クラスから継承されることに注意してください。

Bobという名前のマーケティング・スタッフのメンバーにロールを割り当てるには、次のようにエントリを更新します。

$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=Bob Arnold,ou=marketing,ou=People,dc=example,dc=com
changetype: modify
add: nsRoleDN
nsRoleDN: cn=Marketing,ou=marketing,ou=People,dc=example,dc=com

nsRoleDN属性では、エントリが管理対象ロールのメンバーであることを示しています。管理対象ロールは、そのロール定義のDNにより識別されます。ユーザーが自身のnsRoleDN属性を変更できるようにしつつも、nsManagedDisabledRoleの追加や削除はできないようにするには、次のACIを追加します。

aci: (targetattr="nsRoleDN")(targattrfilters="add=nsRoleDN: 
(!(nsRoleDN=cn=AdministratorRole,dc=example,dc=com)), 
del=nsRoleDN:(!(nsRoleDN=cn=nsManagedDisabledRole,dc=example, dc=com)") 
(version3.0;aci "allow mod of nsRoleDN by self except for critical values"; 
allow(write) userdn="ldap:///self";)

9.3.2.2 フィルタ処理されたロール定義の例

セールス・マネージャのフィルタ処理されたロールを設定するには、すべてのセールス・マネージャがisManager属性を持つものとして、次のldapmodifyコマンドを使用します。

$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=ManagerFilter,ou=sales,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: nsRoleDefinition
objectclass: nsComplexRoleDefinition
objectclass: nsFilteredRoleDefinition
cn: ManagerFilter 
nsRoleFilter: (isManager=True)
Description: filtered role for sales managers

nsFilteredRoleDefinitionオブジェクト・クラスは、LDAPsubentrynsRoleDefinitionおよびnsComplexRoleDefinitionオブジェクト・クラスから継承されることに注意してください。nsRoleFilter属性は、下位組織を持つou=sales組織の従業員すべてを検索するフィルタを指定し、たとえば次のようになります。

$ ldapsearch -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - \
 -b "ou=People,dc=example,dc=com" -s sub "(cn=*Fuentes)"
dn: cn=Carla Fuentes,ou=sales,ou=People,dc=example,dc=comcn: Carla Fuentes 
isManager: TRUE...
nsRole: cn=ManagerFilter,ou=sales,ou=People,
dc=example,dc=com

注意:

フィルタ処理されたロールのフィルタ文字列は任意の属性に基づくことができますが、CoSメカニズムで生成される算出属性については例外となります。


フィルタ処理されたロールのメンバーがユーザー・エントリである場合、それらのメンバーがロールに自分自身を追加または削除する機能を制限することが可能です。ACIでフィルタ処理された属性を保護してください。

9.3.2.3 ネストされたロール定義の例

ネストされたロール内にネストされるロールは、nsRoleDN属性を使用して指定します。次のコマンドを使用して、前の例で作成したロールのマーケティング・スタッフおよびセールス・マネージャの両方のメンバーを含むロールを作成します。

$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=MarketingSales,ou=marketing,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: nsRoleDefinition
objectclass: nsComplexRoleDefinition
objectclass: nsNestedRoleDefinition
cn: MarketingSales
nsRoleDN: cn=ManagerFilter,ou=sales,ou=People,dc=example,dc=com
nsRoleDN: cn=Marketing,ou=marketing,ou=People,dc=example,dc=com
nsRoleScopeDN: ou=sales,ou=People,dc=example,dc=com

nsNestedRoleDefinitionオブジェクト・クラスは、LDAPsubentrynsRoleDefinitionおよびnsComplexRoleDefinitionオブジェクト・クラスから継承されることに注意してください。nsRoleDN属性は、マーケティングの管理対象ロール、およびセールス・マネージャのフィルタ処理されたロールのDNを含んでいます。前述の例のユーザーBobとCarlaはどちらもこの新しくネストされたロールのメンバーとなります。

このフィルタの範囲には、デフォルトの有効範囲が含まれ、これはフィルタがあるサブツリー、およびnsRoleScopeDN属性の値の下にあるサブツリーのことです。この場合、ManagerFilterou=sales,ou=People,dc=example,dc=comサブツリーにあります。このサブツリーを範囲に追加する必要があります。

9.3.3 ロールの範囲の拡張

Directory Serverでは、ロールの範囲をロール定義エントリのサブツリーを超えて拡張できる属性が用意されています。この単一値属性nsRoleScopeDNは、既存ロールに追加する範囲のDNを含みます。nsRoleScopeDN属性は、ネストされたロールにのみ追加できます。「ネストされたロール定義の例」を参照してください。

9.3.3.1 ロールの範囲を拡張するには

このタスクの実行には、DSCCを使用できません。次の手順の説明に従って、コマンドラインを使用してください。

nsRoleScopeDN属性により、あるサブツリーのロールの範囲を拡張して、他のサブツリーのエントリを含めることができます。たとえば、example.comディレクトリ・ツリーの2つの主要サブツリーである、o=eng,dc=example,dc=com(エンジニアリング・サブツリー)およびo=sales,dc=example,dc=com(セールス・サブツリー)を考えます。エンジニアリング・サブツリーのユーザーは、セールス・サブツリーのロール(SalesAppManagedRole)で管理されるセールス・アプリケーションへのアクセス権が必要になります。ロールの範囲を拡張するには、次を実行します。

  1. エンジニアリング・サブツリーのユーザーのロールを作成します。

    たとえば、ロールEngineerManagedRoleを作成します。この例では、管理対象ロールを使用しますが、フィルタ処理されたロールまたはネストされたロールでも同様にできます。

  2. セールス・サブツリーにネストされたロール、たとえばSalesAppPlusEngNestedRoleを作成して、新たに作成したEngineerManagedRoleと元からあるSalesAppManagedRoleを収容します。

  3. 追加するエンジニアリング・サブツリーの範囲のDN(この場合はo=eng,dc=example,dc=com)で、nsRoleScopeDN属性をSalesAppPlusEngNestedRoleに追加します。

    エンジニアリング・ユーザーには必要な権限を付与して、SalesAppPlusEngNestedRoleロール、さらにはセールス・アプリケーションにアクセスできるようにする必要があります。さらに、ロールの範囲全体をレプリケートする必要があります。


    注意:

    拡張する範囲をネストされたロールに制限することは、以前あるドメインでロールを管理していた管理者は、他のドメインの既存ロールを使用する権限しか持たないことを意味します。管理者は他のドメインで任意のロールを作成できません。


9.4 サービス・クラス

サービス・クラス(CoS)のメカニズムは、クライアント・アプリケーション用にエントリが取得されると、算出属性を生成します。これによりエントリ管理が簡素化され、記憶域の必要量が減少します。CoSメカニズムにより属性をエントリ間で共有できるようになります。グループおよびロールと同様に、CoSもヘルパー・エントリに依存します。

デプロイメントでのCoSの使用方法は、Oracle Directory Server Enterprise Editionのリファレンスの第12章のDirectory Serverのサービス・クラスについての章を参照してください。


注意:

すべての検索操作で、CoSで生成された属性の有無をテストしたり、属性値を比較できます。算出属性の名前は、クライアントの検索操作からあらゆるフィルタ文字列で使用できますが、フィルタ処理されたロールで使用される内部フィルタでは例外です。

新しいCoS定義を反映させるには、Directory Serverインスタンスを再起動する必要があります。


9.4.1 CoSのセキュアな使用方法

次の各項では、各CoSエントリのデータ読取り/書込み保護についての一般的な原則を説明します。個々のアクセス制御命令(ACI)を定義する詳細手順は、第6章「Directory Serverのアクセス制御」で説明しています。

9.4.1.1 CoS定義エントリの保護

CoS定義エントリは生成された属性の値を含みませんが、その値を検索するための情報提供を行います。CoS定義エントリの読込みにより、その値を含むテンプレート・エントリの検索方法がわかります。このエントリへの書込みにより、算出属性の生成方法が変更されます。

したがって、CoS定義エントリに対して読込みと書込みの両方のACIを定義する必要があります。

9.4.1.2 CoSテンプレート・エントリの保護

CoSテンプレート・エントリには、生成されたCoS属性の値が含まれます。しかがって、少なくとも読込みと更新については、テンプレートのCoS属性をACIで保護する必要があります。

  • ポインタCoSの場合、1つのテンプレート・エントリの名前変更は許可できません。ほとんどの場合において、テンプレート・エントリ全体を保護することが最も簡単な方法です。

  • クラシックCoSでは、すべてのテンプレート・エントリが定義エントリで指定された共通の親を持ちます。テンプレートをこの親エントリに格納すれば、親エントリへのアクセス制御によりテンプレートが保護されます。ただし、親の下にある他のエントリがアクセスを要求した場合、テンプレート・エントリを個別に保護する必要があります。

  • 間接CoSの場合、テンプレートはディレクト内の任意のエントリにできます。これにはアクセスされる必要があるユーザー・エントリも含まれます。必要に応じて、ディレクトリ全体のCoS属性に対してアクセスを制御するか、またはテンプレートとして使用する各エントリでのCoS属性のセキュリティを確保できます。

9.4.1.3 CoSのターゲット・エントリの保護

計算されたCoS属性が生成されるCoS定義の範囲内にあるすべてエントリも、その値の算出に役立ちます。

CoS属性がすでにターゲット・エントリに存在する場合、デフォルトで、CoSメカニズムはこの値をオーバーライドしません。この動作が不要な場合、ターゲット・エントリをオーバーライドするようCoSを定義するか、すべてのターゲット・エントリのCoS属性を保護します。

間接CoSおよびクラシックCoSはターゲット・エントリの指示子属性にも依存します。この属性により、使用するテンプレート・エントリのDNまたはRDNが指定されます。ACIを使用して、CoS範囲全体でグローバルに、または必要に応じて各ターゲット・エントリに対して個別に、この属性を保護する必要があります。

9.4.1.4 その他の依存関係の保護

計算されたCoS属性は、生成されたその他のCoS属性やロールに関して定義できます。計算されたCoS属性を保護するには、これらの依存関係を理解して保護する必要があります。

たとえば、ターゲット・エントリのCoS指示子属性が、nsRoleになることがあります。したがってロール定義もACIで保護する必要があります。

一般に、算出属性値の算出に関係する属性またはエントリは、読取りと書込みの両方のアクセス制御用のACIを持つ必要があります。このため、複合的な依存関係は十分に計画するか、簡素化して、続くアクセス制御実装の煩雑性を軽減する必要があります。その他の算出属性との依存関係を最小限に抑えることで、ディレクトリのパフォーマンスを向上させ、メンテナンスを軽減できます。

9.4.2 コマンドラインからのCoS管理

構成情報とテンプレート・データはすべてディレクトリ内にエントリとして格納されるので、LDAPコマンドライン・ツールを使用して、CoS定義を構成および管理できます。この項では、コマンドラインからのCoS定義エントリおよびCoSテンプレート・エントリを作成する方法を示します。

9.4.2.1 コマンドラインからのCoS定義エントリの作成

すべてのCoS定義のエントリは、LDAPsubentryオブジェクト・クラスを持ち、cosSuperDefinitionオブジェクト・クラスから継承されます。また、CoSの各タイプは特定のオブジェクト・クラスから継承され、対応する属性を含みます。次の表に、各タイプのCoS定義エントリに関連付けられたオブジェクト・クラスと属性を示します。

表9-1 CoS定義エントリのオブジェクト・クラスと属性

CoSのタイプ CoS定義のエントリ

ポインタCoS

objectclass: top

objectclass: LDAPsubentry

objectclass: cosSuperDefinition

objectclass: cosPointerDefinition

cosTemplateDN: DN

cosAttribute: attributeName override merge

間接CoS

objectclass: top

objectclass: LDAPsubentry

objectclass: cosSuperDefinition

objectclass: cosIndirectDefinition

cosIndirectSpecifier: attributeName

cosAttribute: attributeName override merge

クラシックCoS

objectclass: top

objectclass: LDAPsubentry

objectclass: cosSuperDefinition

objectclass: cosClassicDefinition

cosTemplateDN: DN

cosSpecifier: attributeName

cosAttribute: attributeName override merge


いずれの場合も、cosAttributeは複数値となります。各値は、CoSメカニズムにより生成される属性を定義します。

CoS定義エントリでは、次の属性が使用できます。これらの各属性については、Oracle Directory Server Enterprise Editionのマニュアル・ページ・リファレンスの各属性を参照してください。

表9-2 CoS定義エントリの属性

属性 CoS定義エントリ内での目的

cosAttribute

attributeName override merge

値を生成する算出属性の名前を定義します。この属性は複数値となります。それぞれの値は、値がテンプレートから生成される属性の名前を表します。overrideおよびmerge修飾子により、次の表で説明するような特別な場合のCoS属性値の算出方法を指定します。

attributeNameにサブタイプを含めることはできません。サブタイプを伴う属性名は無視されますが、cosAttributeのその他の値は処理されます。

cosIndirectSpecifier

attributeName

ターゲット・エントリの属性名を定義します。間接CoSはこの属性の値を使用してテンプレート・エントリを識別します。名前が指定された属性は指示子と呼ばれ、各ターゲット・エントリに完全DN文字列を含める必要があります。この属性は単一の値ですが、attributeNameを複数値にすることで、複数のテンプレートを指定できます。

cosSpecifier

attributeName

ターゲット・エントリの属性名を定義します。クラシックCoSはこの属性の値を使用してテンプレート・エントリを識別します。名前が指定された属性は指示子と呼ばれ、テンプレート・エントリのRDN内で検出可能な文字列を含める必要があります。この属性は単一の値ですが、attributeNameを複数値にすることで、複数のテンプレートを指定できます。

cosTemplateDN

DN

ポインタCoS定義用にテンプレート・エントリの完全DNを、クラシックCoS用にテンプレート・エントリのベースDNを指定します。この属性は単一の値です。



注意:

isMemberOf属性をCosSpecifierとして使用して、静的グループのメンバーすべてに、共通の算出属性値から自動的に継承させることはできません。


cosAttribute属性には、CoS属性の名前の後に2つの修飾子(override修飾子およびmerge修飾子)を付けることができます。

override修飾子は、CoSにより動的に生成される属性がすでにエントリ内で物理的に存在する場合の動作を記述します。override修飾子は、次のいずれかにできます。

  • default(または修飾子なし) - 算出属性と同じタイプの属性である場合、サーバーではエントリに格納されている実際の属性値をオーバーライドしないことを示します。

  • override - 値がエントリとともに格納されている場合でも、サーバーは常にCoSで生成される値を返すことを示します。

  • operational - 検索で明示的に要求された場合にのみ、属性が返されることを示します。操作属性では、返されるスキーマ・チェックを渡す必要はありません。operational修飾子はoverride修飾子と同じ動作をします。

    スキーマにおいても属性が操作属性として定義されている場合のみ、属性を操作属性にできます。たとえば、CoSによりdescription属性の値を生成する場合、operational修飾子を使用できません。これは、description属性がスキーマ内で操作属性としてマークされていないためです。

merge修飾子は指定しないか、merge-schemesとします。この修飾子では、複数テンプレートまたは複数CoS定義から、計算されたCoS属性に複数の値を指定できます。詳細は、「複数値のCoS属性」を参照してください。

9.4.2.1.1 実際の属性値のオーバーライド

override修飾子を含むポインタCoS定義エントリを次のように作成できます。

dn: cn=pointerCoS,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosPointerDefinition
cosTemplateDn: cn=exampleUS,cn=data
cosAttribute: postalCode override

このポインタCoS定義エントリでは、エントリが、postalCode属性の値を生成するテンプレート・エントリcn=exampleUS,cn=dataに関連付けられていることを示しています。override修飾子は、この属性がターゲット・エントリに存在する場合は、postalCode属性の値よりもこの値が優先されることを示しています。


注意:

CoS属性をoperationalまたはoverride修飾子で定義した場合、CoS範囲内のエントリで、その属性の実際の値に書込み操作を実行することはできません。


9.4.2.1.2 複数値のCoS属性

merge-schemes修飾子を指定する場合、次の2つの方法によって、生成されたCoS属性に複数の値を指定できます。

  • 間接CoSまたはクラシックCoSでは、ターゲット・エントリの指示子属性に複数の値を指定できます。この場合、それぞれの値によりテンプレートが決定され、各テンプレートの値は生成された値の一部となります。

  • 任意のタイプの複数のCoS定義エントリで、cosAttributeに同じ属性名を含めることができます。この場合、すべての定義にmerge-schemes修飾子が含まれていれば、生成された属性には各定義によって算出された値すべてが含まれます。

2つの状況が同時に発生して、さらに多くの値を定義する場合もあります。ただし、いずれの場合でも、重複した値が生成された属性に返されるのは一度のみです。

merge-schemes修飾子を指定しない場合は、テンプレート・エントリのcosPriority属性を使用して、生成された属性のすべてのテンプレートの中から1つの値を決定します。このシナリオについては、次の項で説明します。

merge-schemes修飾子は、ターゲットで定義された実際の値とテンプレートから生成された値をマージしません。merge修飾子は、override修飾子に依存しません。すべての組合せが可能で、それぞれが含んでいる動作は相補的なものとなります。また、修飾子は属性名の後に任意の順序で指定できます。


注意:

同じ属性に複数のCoS定義が存在する場合は、その定義すべてが同じoverride修飾子およびmerge修飾子を持つ必要があります。CoS定義に修飾子の組合せが複数ある場合は、すべての定義の中から1つの組合せが任意に選択されます。


9.4.2.1.3 CoS属性の優先順位

複数のCoS定義または複数値の指示子は存在するが、merge-schemes修飾子が指定されていない場合、Directory Serverでは優先順位属性を使用して、算出属性の単一の値を定義する単一のテンプレートを選択します。

cosPriority属性は、対象となるすべてのテンプレートの中での特定のテンプレートのグローバルな優先順位を表します。優先順位0が最高の優先順位となります。cosPriority属性を含まないテンプレートは、最低の優先順位とみなされます。複数のテンプレートが属性値を指定していても、同一の優先順位または設定なしの場合は、任意の値が選択されます。

merge-schemes修飾子を使用する場合は、テンプレートの優先順位は考慮されません。マージする際に、テンプレートで定義される優先順位に関係なく、対象となるすべてのテンプレートで値が定義されます。cosPriority属性は、次項で説明するように、CoSテンプレート・エントリで定義されます。


注意:

cosPriority属性を負の値にしないでください。また、間接CoSにより生成される属性では、優先順位がサポートされません。間接CoS定義のテンプレート・エントリでは、cosPriorityを使用しないでください。


9.4.2.2 コマンドラインからのCoSテンプレート・エントリの作成

ポインタCoSまたはクラシックCoSを使用する場合、テンプレート・エントリにはLDAPsubentryおよびcosTemplateオブジェクト・クラスが含まれます。このエントリは、CoS定義専用に作成する必要があります。CoSテンプレート・エントリをLDAPsubentryオブジェクト・クラスのインスタンスにすることで、構成エントリの影響を受けずに、通常の検索が実行できるようになります。

間接CoSメカニズムのテンプレートは、ディレクトリ内の任意の既存エントリとなります。ターゲットをあらかじめ指定したり、LDAPsubentryオブジェクト・クラスを指定する必要はありませんが、ターゲットには予備のcosTemplateオブジェクト・クラスが含まれている必要があります。間接CoSテンプレートには、CoSを評価して算出属性とその値を生成する場合にのみアクセスします。

すべての場合において、CoSテンプレート・エントリには、ターゲット・エントリのCoSによって生成された属性および値を含める必要があります。属性名はCoS定義のエントリのcosAttribute属性で指定されます。

次の例では、postalCode属性を生成するポインタCoSに対する優先順位が最も高いテンプレート・エントリを示します。

dn: cn=ZipTemplate,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: extensibleobject
objectclass: cosTemplate
postalCode: 95054
cosPriority: 0

次の各項では、テンプレート・エントリの例、および各種CoS定義エントリの例を示します。

9.4.2.2.1 ポインタCoSの例

次のコマンドは、cosPointerDefinitionオブジェクト・クラスを持つポインタCoS定義エントリを作成します。この定義エントリでは、前項の例で述べたCoSテンプレート・エントリを使用して、ou=People,dc=example,dc=comツリーのすべてのエントリで共通の郵便番号を共有しています。

$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=pointerCoS,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosPointerDefinition
cosTemplateDn: cn=ZipTemplate,ou=People,dc=example,dc=com
cosAttribute: postalCode

CoSテンプレート・エントリ(cn=ZipTemplate,ou=People,dc=example,dc=com)は、ou=People,dc=example,dc=com接尾辞の下のすべてのエントリに対して、postalCode属性に格納されている値を提供します。同じサブツリー内で郵便番号を持たないエントリを検索すると、生成される属性の値は次のようになります。

$ ldapsearch -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - \
 -b "ou=People,dc=example,dc=com" -s sub "(cn=*Jensen)"
dn: cn=Babs Jensen,ou=People,dc=example,dc=com
cn: Babs Jensen
...
postalCode: 95054
9.4.2.2.2 間接CoSの例

間接CoSでは、各ターゲットに固有のテンプレートを見つけるために、cosIndirectSpecifier属性内の属性に名前が付けられます。間接CoSのテンプレート・エントリは、他のユーザー・エントリを含むディレクトリ内の任意のエントリにできます。この例の間接CoSでは、ターゲット・エントリのmanager属性を使用して、CoSテンプレート・エントリを識別します。テンプレート・エントリはマネージャのユーザー・エントリです。マネージャのユーザー・エントリには、生成する属性の値が含まれます。この場合、その値はdepartmentNumberの値となります。

次のコマンドは、cosIndirectDefinitionオブジェクト・クラスを含む間接CoS定義エントリを作成します。

$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=generateDeptNum,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosIndirectDefinition
cosIndirectSpecifier: manager
cosAttribute: departmentNumber

次に、cosTemplateオブジェクト・クラスをテンプレート・エントリに追加して、生成される属性が定義されていることを確認します。この例では、マネージャのエントリは次のようにすべてテンプレートとなります。

$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=Carla Fuentes,ou=People,dc=example,dc=com
changetype: modify
add: objectclass
objectclass: cosTemplate
-
add: departmentNumber
departmentNumber: 318842

このCoSでは、manager属性を含むターゲット・エントリ(ou=People,dc=example,dc=comの下のエントリ)には、自動的にマネージャの部署番号が含まれます。departmentNumber属性はサーバーに存在しないため、ターゲット・エントリで算出されます。ただし、departmentNumber属性はターゲット・エントリの一部として返されます。たとえば、Babs JensenのマネージャをCarla Fuentesとして定義する場合、彼女の部署番号は次のように表示されます。

$ ldapsearch -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - \
 -b "ou=People,dc=example,dc=com" -s sub "(cn=*Jensen)"
dn: cn=Babs Jensen,ou=People,dc=example,dc=com
cn: Babs Jensen
...
manager: cn=Carla Fuentes,ou=People,dc=example,dc=com
departmentNumber: 318842
9.4.2.2.3 クラシックCoSの例

この例では、クラシックCoSによる住所の生成方法を示します。生成される値は、CoS定義のcosTemplateDNおよびターゲット・エントリのcosSpecifier属性の値の組合せで検索されるテンプレート・エントリに指定されます。次のコマンドは、cosClassicDefinitionオブジェクト・クラスを使用して、定義エントリを作成します。

$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=classicCoS,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosClassicDefinition
cosTemplateDn: ou=People,dc=example,dc=com
cosSpecifier: building
cosAttribute: postalAddress

同じコマンドを使用して、各ビルの住所を提供するテンプレート・エントリを作成します。

dn: cn=B07,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: extensibleobject
objectclass: cosTemplate
postalAddres: 7 Old Oak Street, Anytown, CA 95054

このCoSでは、building属性を含むターゲット・エントリ(ou=People,dc=example,dc=comの下のエントリ)には、自動的に対応する住所が含まれます。CoSメカニズムは、RDNに指示子属性値を持つテンプレート・エントリを検索します。この例では、Babs JensenがビルB07に割り当てられると、Jensenの住所は次のように生成されます。

$ ldapsearch -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - \
 -b "ou=People,dc=example,dc=com" -s sub "(cn=*Jensen)"
dn: cn=Babs Jensen,ou=People,dc=example,dc=com
cn: Babs Jensen
...
building: B07
postalAddress: 7 Old Oak Street, Anytown, CA 95054

9.4.3 ロールベース属性の作成

エントリが所有するロールに基づくエントリに対して属性値を生成するクラシックCoSスキーマを作成できます。たとえば、ロールベースの属性を使用して、サーバーの検索制限をエントリごとに設定できます。

ロールベース属性を作成するには、クラシックCoSのCoS定義エントリ内でcosSpecifierとしてnsRole属性を使用します。nsRole属性には複数の値を指定できるので、複数の使用可能なテンプレート・エントリを持つCoSスキーマを定義できます。どのテンプレート・エントリを使用するかを明確にするには、cosPriority属性をCoSテンプレート・エントリに含めることができます。

たとえば、マネージャ・ロールのメンバーが標準のメールボックス割当て量を超えて使用できるようにするCoSを作成できます。マネージャ・ロール次のようになります。

dn: cn=ManagerRole,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: nsRoleDefinition
objectclass: nsComplexRoleDefinition
objectclass: nsFilteredRoleDefinition
cn: ManagerRole
nsRoleFilter: (isManager=True)
Description: filtered role for managers

クラシックCoS定義エントリは次のように作成します。

dn: cn=generateManagerQuota,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosClassicDefinition
cosTemplateDn: cn=managerCOS,ou=People,dc=example,dc=com
cosSpecifier: nsRole
cosAttribute: mailboxquota override

CoSテンプレート名は、cosTemplateDnとロールのDNであるnsRoleの値の組合せにする必要があります。次に例を示します。

dn:cn="cn=ManagerRole,ou=People,dc=example,dc=com",\
 cn=managerCOS,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: extensibleobject
objectclass: cosTemplate
mailboxquota: 1000000

CoSテンプレート・エントリは、mailboxquota属性の値を提供します。追加のoverride修飾子は、CoSに対してターゲット・エントリ内に既存のmailboxquota属性をオーバーライドするよう指定します。ロールのメンバーであるターゲット・エントリは、たとえば、次のように、ロールとCoSにより生成される算出属性を持ちます。

$ ldapsearch -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -\
 -b "ou=People,dc=example,dc=com" -s sub "(cn=*Fuentes)"
dn: cn=Carla Fuentes,ou=People,dc=example,dc=comcn: Carla Fuentes
isManager: TRUE...nsRole: cn=ManagerRole,ou=People,dc=example,dc=com
mailboxquota: 1000000

注意:

ロール・エントリおよびCoS定義エントリは、適用範囲に同じターゲット・エントリを持つように、ディレクトリ・ツリー内の同じ場所に配置する必要があります。CoSターゲット・エントリも、検索やメンテナンスを容易にするため、同し場所に配置する必要があります。


9.4.4 CoSプラグインの監視

Directory Serverでは、CoSプラグインの特定の面を監視できます。CoS監視属性は、cn=monitor,cn=Class of Service,cn=plugins,cn=configエントリに格納されます。このエントリの下の各属性およびそれらが提供する情報の詳細は、Oracle Directory Server Enterprise Editionのマニュアル・ページ・リファレンスを参照してください。

9.4.5 CoSロギングの設定

Directory Serverでは、適用可能な複数の定義エントリの間でなんらかの区別を付ける必要がある場合、警告メッセージがログに記録されます。それらの警告メッセージは次の形式となります。

Definition /defDN1/ and definition /defDN2/ compete to provide attribute
 '/type/' at priority /level/

さらに、ディレクトリサーバーが複数の該当する可能性のある定義エントリ間でなんらかの区別を付ける必要がある場合に、情報メッセージを記録するように、Directory Serverを構成することもできます。このためには、プラグインからのメッセージを取り込むようにエラー・ログを設定します。


注意:

ログ・レベルの追加設定は、ロギングによって負荷が増す可能性があるので、本番サーバーではロギングを設定しないことをお薦めします。


情報メッセージの内容は次の形式となります。

Definition /defDN1/ and definition /defDN2/ potentially compete 
to provide attribute '/type/' at priority /level/

これで、定義エントリにCoS優先順位を適切に設定することで、CoSが曖昧となるようなケースを解消するかどうかを選択できます。

9.5 参照整合性の保持

参照整合性とは、エントリ間の関係を確実に維持するプラグイン・メカニズムです。グループ・メンバーシップの属性など、いくつかの属性には他のエントリのDNが含まれています。参照整合性を使用すれば、あるエントリを削除したときに、そのエントリのDNを含むすべての属性も削除できます。

たとえば、あるユーザーのエントリがディレクトリから削除された場合、参照整合性が有効になっていれば、そのユーザーはサーバーによって、所属しているすべてのグループからも削除されます。参照整合性が有効でない場合は、管理者がユーザーをグループから手動で削除する必要があります。Directory Serverをユーザーおよびグループの管理にディレクトリに依存するSunの他製品と統合する場合には、この機能が重要となります。

9.5.1 参照整合性の仕組み

参照整合性プラグインが有効な場合、削除、名前変更または移動の各操作の直後に、指定された属性に対する整合性更新が実行されます。デフォルトでは、参照整合性プラグインは無効となります。

ディレクトリ内にあるユーザー・エントリまたはグループ・エントリの削除、名前変更、移動のたびに、その操作が参照整合性ログ・ファイルに記録されます。

instance-path/logs/referint

指定した時間(通称更新間隔)が経過すると、サーバーは参照整合性が有効なすべての属性を検索して、検索結果のエントリと、ログ・ファイルに存在する削除または変更済エントリのDNを照合します。特定のエントリが削除されたことがログ・ファイルに記録されていれば、対応する属性が削除されます。特定のエントリが変更されたことがログ・ファイルに記録されていれば、対応する属性値がそれに応じて変更されます。

参照整合性プラグインのデフォルト構成を有効にした場合、削除、名前変更、移動の操作を実行した直後に、memberuniquememberownerseeAlsoおよびnsrolednの各属性に対する整合性更新が実行されます。ただし、参照整合性プラグインの動作はユーザー自身の要件に合わせて構成できます。次のような動作を構成できます。

  • 参照整合性の更新を別ファイルに記録する。

  • 更新間隔を変更する。

    参照整合性の更新によるシステムへの影響を少なくする場合は、更新間隔を長くできます。

  • 参照整合性を適用する属性を選択する。

    DN値を含む属性を使用または定義する場合、参照整合性プラグインでそれらを監視することもできます。

9.5.2 参照整合性プラグインを構成するには


注意:

参照整合性プラグインで使用する全データベースのすべての属性に、索引を作成する必要があります。索引はすべてのデータベースの構成で作成する必要があります。レトロ変更ログが有効になっている場合、cn=changelog接尾辞の索引を作成する必要があります。詳細は、第12章「Directory Serverの索引付け」を参照してください。


レプリケートされた環境では、特定の制限が参照整合性プラグインの使用に関連付けられています。それらの制限事項のリストは、「レプリケーションおよび参照整合性」を参照してください。

WebインタフェースのDirectory Service Control Center (DSCC)を使用して、このタスクを実行できます。

  1. すべてのレプリカが構成されていること、およびすべてのレプリケーション承諾が定義されていることを確認します。

  2. 参照整合性を維持する一連の属性を定義し、マスター・サーバーで使用する更新間隔を決定します。

  3. 同じ属性セットと同じ更新間隔を使用して、すべてのマスター・サーバーで参照整合性を有効にします。

    • 参照整合性の属性を定義するには、次のコマンドを使用します。

      $ dsconf set-server-prop -h host -p port ref-integrity-attr:attribute-name \
       ref-integrity-attr:attribute-name
      
    • 参照整合性の属性を既存の属性リストに追加するには、次のコマンドを使用します。

      $ dsconf set-server-prop -h host -p port ref-integrity-attr+:attribute-name
      
    • 参照整合性の更新間隔を定義するには、次のコマンドを使用します。

      $ dsconf set-server-prop -h host -p port ref-integrity-check-delay:duration
      
    • 参照整合性を有効にするには、次のコマンドを使用します。

      $ dsconf set-server-prop -h host -p port ref-integrity-enabled:on
      
  4. すべてのコンシューマ・サーバーで参照整合性プラグインが無効になっていることを確認します。