この章では、Oracle Internet Directoryの集合属性について説明し、LDAPコマンド行ツールを使用してそれらを管理する方法について説明します。
この章の内容は次のとおりです。
エントリのコレクションで構成されるエントリによって共有される属性は、集合属性と呼ばれます。集合属性の値は表示可能ですが、コレクション内のエントリにアクセスするクライアントによって更新することはできません。管理者は、関連付けられている集合属性サブ・エントリを定義および変更することで、集合属性を管理します。
|
関連項目: 詳細は、http://www.ietf.orgにあるRFC 3671「Collective Attributes in the Lightweight Directory Access Protocol (LDAP)」およびRFC 3672「Subentries in the Lightweight Directory Access Protocol (LDAP)」を参照してください。 |
RFC 3671では、集合属性の特定のスキーマについて説明しています。RFCで説明されているのとまったく同じ集合属性スキーマを定義して使用することもできます。ただし、Oracle Internet Directoryでは、より簡単に使用できるように、集合属性の定義を拡張しています。
サブエントリを定義することで、集合属性を作成します。次の例では、dc=mycompany,dc=comの下のエントリに集合サブエントリを定義します。このサブエントリによって、TelephoneNumberおよびpostalCodeが、dc=mycompany,dc=comの下のすべてのエントリに集合属性として含まれるようになります。
Dn: cn=collective attributes, dc=mycompany,dc=com Cn: collective attributes Objectclass: subentry Objectclass: collectiveAttributeSubentry Objectclass: top Objectclass: extensibleobject TelephoneNumber;collective: 1234560000 PostalCode;collective: 98765
どのエントリが集合属性を実際に取得するかを制御できます。これは、subtreeSpecification属性を集合サブエントリで使用して実行できます。subtreeSpecification属性が集合サブエントリで指定されていない場合、集合属性は、この集合サブエントリが定義されているすべての子エントリ内に含まれています。
|
関連項目: subtreeSpecification属性の詳細は、http://www.ietf.orgにあるRFC 3672「Subentries in the Lightweight Directory Access Protocol(LDAP)」を参照してください。 |
次の3つの項では、subtreeSpecification属性の使用方法の例を示します。
baseキーワードをsubtreeSpecificationで使用して、サブツリーに対する集合属性を制限できます。
たとえば、集合属性をサブツリーcn=users,dc=mycompany,dc=comのみに制限するには、前に示したdc=mycompany,dc=comのサブツリーを使用できますが、次のようにbase値を集合サブエントリのsubtreeSpecification属性に追加します。
SubtreeSpecification: {base "cn=users"}
minimumキーワードとmaximumキーワードをsubtreeSpecification属性で使用して、集合属性が適用される、baseのRDN数を制御します。
たとえば、集合属性をou=Americas,cn=users,dc=mycompany,dc=comの下のエントリに追加するが、cn=users,dc=mycompany,dc=comの1レベル下の子エントリ、またはcn=users, dc=mycompany,dc=comから2レベル下の子エントリには追加しない場合は、subtreeSpecificationを次のように定義します。
SubtreeSpecification: {base "cn=users", minimum 2, maximum 4}
この構成では、cn=john doe, ou=Americas,cn=users,dc=mycompany,dc=comは集合属性を取得しますが、cn=inbox,cn=2009,cn=emailFolder,cn=john doe, ou=Americas,cn=users,dc=mycompany,dc=comは集合属性を取得しません。これは、base cn=usersからの距離が4レベルを超えているためです。
specificExclusions、chopBeforeおよびchopAfterキーワードを使用して、特定のエントリからさらに集合属性を除外できます。たとえば、集合属性をou=Europeには追加しない場合は、次のようにsubtreeSpecificationを定義します。
SubtreeSpecification: {base "cn=users", minimum 2, maximum 4, specificExclusions { chopBefore: "ou=Europe"} }
集合属性を親の識別名に含めるが、その子エントリには含めない場合、次のような仕様フィルタを定義します。
SubtreeSpecification: {base "cn=users", minimum 2, maximum 4, specificExclusions { chopBefore: "ou=Europe", chopAfter: "cn=Global User" } }
この例では、エントリcn=Global User,ou=all region,cn=users,dc=mycompany,dc=comは集合属性を取得しますが、エントリcn=emailFolder, cn=GlobalUser,ou=all region,cn=users,dc=mycompany,dc=comは集合属性を取得しません。
集合属性を特定のオブジェクト・クラスのみに含める場合は、そのオブジェクト・クラスのオブジェクト識別子または名前をsubtreeSpecicfication属性のspecificationFilterに指定します。たとえば、集合属性をobjectclass personのみに含める場合は、次のように仕様フィルタを定義します。
SubtreeSpecification: {base "cn=users", minimum 2, maximum 4, specificExclusions { chopBefore: "ou=Europe", chopAfter: "cn=GlobalUser"}, specificationFilter item:person }
または、次のように使用することもできます。
SubtreeSpecification: {base "cn=users", minimum 2, maximum 4, specificExclusions { chopBefore: "ou=Europe", chopAfter: "cn=GlobalUser"}, specificationFilter item:2.5.6.6 }
ここで、2.5.6.6はobjectclass personのオブジェクト識別子です。
SpecificationFilterの例
キーワードand、orおよびnotを使用して、次のようにsubtreeSpecicficationをさらに詳細に指定できます。
SubtreeSpecification: {base "cn=users", minimum 2, maximum 4, specificExclusions { chopBefore: "ou=Europe", chopAfter: "cn=GlobalUser"}, specificationFilter and:{ item:2.5.6.6, item:2.5.6.7} }
SubtreeSpecification: {base "cn=users", minimum 2, maximum 4, specificExclusions { chopBefore: "ou=Europe", chopAfter: "cn=GlobalUser"}, specificationFilter or:{ item:2.5.6.6, item:2.5.6.7} }
SubtreeSpecification: {base "cn=users", minimum 2, maximum 4, specificExclusions { chopBefore: "ou=Europe", chopAfter: "cn=GlobalUser"}, specificationFilter not:{ item:2.5.6.7} }
11.1.1.9.0以降では、LDAPフィルタを含むようにspecificationFilterの範囲が拡張されたことで、ターゲットにするエントリをより詳細に制御できます。subtreespecification属性でキーワードfilterを使用するには、次のようにします。
subtreespecification: {base "ou=people", filter: orclaccountstatus=enabled }
次の例では、フィルタの定義方法について説明します。
dn: cn=building,dc=us,dc=oracle,dc=com
cn: building
subtreespecification: {base "ou=people_grp" , filter: mail=user.1@example.com }
objectclass: top
objectclass: extensibleobject
objectclass: subentry
objectclass: collectiveattributesubentry
street;collective: 200 ABC Street
前述の例で、集合属性値streetが表示されるのは、user.1@example.comというmail属性を持つエントリのみです。
一部のエントリに、集合属性値ではなく独自の属性値を指定する場合、その属性をそれらのエントリに特別に追加し、属性collectiveExclusions:attributeNameをそのエントリに追加します。すべての集合属性を除外する必要がある場合は、属性excludeAllCollectiveAttributes: trueをそれらのエントリに追加します。これにより、集合属性値の値がオーバーライドされます。たとえば、TelephoneNumber属性およびexcludeAllCollectiveAttributes: true属性をエントリcn=jane smith, ou=Americas,cn=users,dc=mycompany,dc=comに追加した場合、このエントリは、集合属性ではなく、独自のTelephoneNumber値を持つようになります。
他のディレクトリ・エントリと同様、コマンド行から集合属性サブエントリを管理できます。
集合属性を作成するには、次のようにldapaddを使用してLDIFファイルに集合サブエントリを定義します。
ldapadd -p port_number -h host -D cn=orcladmin -q -f subentry.ldif
ここで、subentry.ldifの内容は、次のようになります。
Dn: cn=collective attributes, dc=mycompany,dc=com
Cn: collective attributes
Objectclass: subentry
Objectclass: collectiveAttributeSubentry
Objectclass: top
Objectclass: extensibleobject
TelephoneNumber;collective: 1234560000
PostalCode;collective: 98765
SubtreeSpecification: {base "cn=users", minimum 2, maximum 4, specificExclusions { chopBefore: "ou=Europe", chopAfter: "cn=GlobalUser"}, specificationFilter not:{ item:2.5.6.7} }