16 集合属性の管理
この章の内容は次のとおりです。
16.1 集合属性の概要
エントリのコレクションで構成されるエントリによって共有される属性は、集合属性と呼ばれます。集合属性の値は表示可能ですが、コレクション内のエントリにアクセスするクライアントによって更新することはできません。
管理者は、関連付けられている集合属性サブ・エントリを定義および変更することで、集合属性を管理します。
関連項目:
詳細は、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)」を参照してください。
16.1.1 RFCでの定義およびOracleによる拡張
RFC 3671では、集合属性の特定のスキーマについて説明しています。
RFCで説明されているのとまったく同じ集合属性スキーマを定義して使用することもできます。ただし、Oracle Internet Directoryでは、より簡単に使用できるように、集合属性の定義を拡張しています。
16.1.1.1 RFC 3671
各集合属性スキーマは、集合サブエントリで使用する前に、RFC 3671に従って定義する必要があります。たとえば、電話番号属性を集合属性として使用する場合は、次のように、ディレクトリでc-telephoneNumber
のスキーマを定義します。
( 2.5.4.20.1 NAME 'c-TelephoneNumber' SUP telephoneNumber COLLECTIVE )
また、集合属性は複数値である必要があります。
16.1.2 集合属性サブエントリの定義
サブエントリを定義することで、集合属性を作成します。次の例では、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
16.1.3 subtreeSpecification属性の使用
どのエントリが集合属性を実際に取得するかを制御できます。これは、subtreeSpecification
属性を集合サブエントリで使用して実行できます。
subtreeSpecification
属性が集合サブエントリで指定されていない場合、集合属性は、この集合サブエントリが定義されているすべての子エントリ内に含まれています。
関連項目:
subtreeSpecification
属性の詳細は、http://www.ietf.org
にあるRFC 3672「Subentries in the Lightweight Directory Access Protocol (LDAP)」を参照してください。
次の項では、subtreeSpecification
属性の使用方法の例を示します。
16.1.3.1 baseキーワードを使用したサブツリーへの集合属性の制限
base
キーワードをsubtreeSpecification
で使用して、サブツリーに対する集合属性を制限できます。
たとえば、集合属性をサブツリーcn=users,dc=mycompany,dc=com
のみに制限するには、前に示したdc=mycompany,dc=com
のサブツリーを使用できますが、次のようにbase
値を集合サブエントリのsubtreeSpecification
属性に追加します。
SubtreeSpecification: {base "cn=users"}
16.1.3.2 minimumおよびmaximumキーワードを使用したRDN数の制御
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レベルを超えているためです。
16.1.3.3 chopBeforeおよびchopAfterキーワードを使用した特定の除外の適用
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
は集合属性を取得しません。
16.1.3.4 specificationFilterを使用した特定のオブジェクト・クラスの組込み
集合属性を特定のオブジェクト・クラスのみに含める場合は、そのオブジェクト・クラスのオブジェクト識別子または名前をsubtreeSpecicfication
属性のspecificationFilter
に指定します。
次の各項では、これについてさらに詳しく説明しています。
16.1.3.4.1 特定のオブジェクト・クラスの組込み
集合属性を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
のオブジェクト識別子です。
16.1.3.4.2 オブジェクト・クラスの絞込み
キーワード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} }
16.1.3.4.3 specificationFilterの拡張によるLDAPフィルタの組込み
11 gリリース1 (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
属性を持つエントリのみです。
16.1.4 集合属性のオーバーライド
集合属性値のかわりに、一部のエントリが独自の属性値を持つようにするには、具体的にその属性をエントリに追加し、属性collectiveExclusions:
attributeName
をそのエントリに追加します。
すべての集合属性を除外する必要がある場合は、属性excludeAllCollectiveAttributes: true
をエントリに追加します。これにより、集合属性値の値がオーバーライドされます。たとえば、TelephoneNumber
属性およびexcludeAllCollectiveAttributes: true
属性をエントリcn=jane smith, ou=Americas,cn=users,dc=mycompany,dc=com
に追加した場合、このエントリは、集合属性ではなく、独自のTelephoneNumber
値を持つようになります。
16.2 コマンド行を使用した集合属性の管理
他のディレクトリ・エントリと同様、コマンド行から集合属性サブエントリを管理できます。
次の各項では、これについてさらに詳しく説明しています。
16.2.1 ldapaddを使用したサブエントリの追加
集合属性を作成するには、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} }
16.2.2 ldapmodifyを使用したサブエントリの変更
LDIFファイル内のサブエントリを変更するには、ldapmodify
コマンドを使用します。
次のコマンドを実行してファイルを変更します。
ldapmodify -p 3060 -D "cn=orcladmin" -q -f mod_subentry.ldif
ここで、mod_subentry.ldif
は次のようになります。
dn: cn=collective attributes, dc=mycompany,dc=com changetype: modify replace: PostalCode;collective PostalCode;collective: 98768