ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Directory Server Enterprise Editionリファレンス
11g リリース1 (11.1.1.7.0)
B72441-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

4 Directory Server LDIFおよび検索フィルタ

Directory ServerはLDAP Data Interchange Format (LDIF)を使用して、ディレクトリおよびそのエントリをテキスト形式で記述します。LDIFを使用して、初期ディレクトリ・データベースを構築したり、ディレクトリに多数のエントリを追加することができます。またLDIFを使用して、ディレクトリ・エントリへの変更を記述することもできます。多くのコマンドライン・ユーティリティは、入力または出力についてはLDIFに基づいています。

すべてのディレクトリ・データはユニコードのUTF-8エンコーディングを使用することによって格納され、したがってLDIFファイルはUTF-8でエンコードされる必要があります。

この章では、ディレクトリの検索およびLDAP検索フィルタについても説明します。

LDIFおよびディレクトリの検索の詳細は、次の項を参照してください。

4.1 LDIFファイル形式

LDIFファイルは、空白行によって区切られた1つ以上のディレクトリ・エントリから構成されます。各LDIFエントリは、次の部分から構成されています。

LDIF形式は、RFC 2849で定義されています。

次の例は、LDIFの基本的なディレクトリ・エントリを示しています。

例4-1 LDIFのディレクトリ・エントリ

dn: distinguished_name
objectClass: object_class
objectClass: object_class
...
attribute_type[;subtype]: attribute_value
attribute_type[;subtype]: attribute_value
...

他のすべての属性およびオブジェクト・クラスは、オプションです。オブジェクト・クラスおよび属性は、任意の順序に指定できます。コロンの後ろのスペースは、任意です。

次の表では、LDIFファイルのフィールドについて説明します。

表4-1 LDIFのフィールド

フィールド 定義

[id]

オプション。エントリIDを示す、正の10進数。データベース作成ツールによって、このIDが生成されます。この値を、ユーザー自身で追加または編集しないでください。

dn: distinguished_name

エントリの識別名。

objectClass: object_class

このエントリで使用するオブジェクト・クラス。このオブジェクト・クラスは、エントリについて許可され、必要である属性またはスキーマのタイプを識別します。

attribute_type

エントリで使用される記述属性。この属性は、スキーマで定義されます。

[subtype]

オプション。次のタイプの1つのサブタイプ。

  • 言語(属性;lang-サブタイプ)によって、対応する属性値が記述されている言語を識別

  • バイナリ(属性;binary)によって、属性値がバイナリかどうかを識別

  • 発音(属性;phonetic)によって、当該属性値がある属性値の発音であるかどうかを識別

attribute_value

属性タイプとともに使用される属性値。


ディレクトリ内のエントリに対する変更を示すLDIF構文は、前述の構文とは異なります。

4.1.1 LDIFにおける行の継続

LDIFを指定すると、改行および行の継続、または1スペースによって行の継続位置をインデントすることによって行を折り返すことができます。たとえば、次の2つの文は同一です。

dn: cn=Babs Jensen,dc=example,dc=com

dn: cn=Babs J
 ensen,dc=exam
 ple,dc=com

LDIF行の改行および継続は必須ではありません。ただし、LDIFファイルが読みやすくなります。

4.1.2 LDIFにおけるバイナリ・データ

次の方法のいずれかを使用して、LDIFにおけるバイナリ・データを表すことができます。

  • 標準LDIF表記で、より小さいの意の、<記号

  • コマンドライン・ユーティリティでldapmodify (-bオプションあり)

  • Base 64エンコード

4.1.2.1 標準のLDIF表記を使用したバイナリ・データの表現

次の例では、バイナリ・データについての標準のLDIF表記が示されています。

jpegphoto:< file:/path/to/photo

この例ではパスは、サーバーではなくクライアントに関連しています。標準の表記を使用するには、ldapmodify -bパラメータを指定する必要はありません。ただし、次の行をLDIFファイルの最初またはLDIFのUPDATE文に追加する必要があります。

version:1

たとえば次のように、ldapmodifyコマンドを使用できます。

$ ldapmodify -D userDN -w passwd
version: 1
dn: cn=Barbara Jensen,ou=People,dc=example,dc=com
changetype: modify
add: userCertificate
userCertificate;binary:< file:BabsCert

4.1.2.2 ldapmodify -bコマンドを使用したバイナリ・データの表現

Directory Serverの以前のバージョンとの下位互換性については、ldapmodify -bコマンドを使用して、バイナリ・データを表現できます。ただし可能な場合は、標準のLDIF表記を使用してバイナリ・データを表現します。

Directory Serverは、-bパラメータのあるldapmodifyコマンドおよび次のLDIF表記を受け入れます。

jpegphoto: /path/to/photo

この表記は、属性値がスラッシュで始まる場合に、ldapmodifyコマンドがバイナリ値に関する参照ファイルを読み取る必要があることを示しています。

4.1.2.3 Base 64エンコードを使用したバイナリ・データの表現

Base 64でエンコードされたデータは、この例で示されているように::記号で表現されます。

jpegPhoto:: encoded_data

バイナリ・データに加えて、次の値もBase 64でエンコードされている必要があります。

  • セミコロン;で始まるすべての値、またはスペース

  • ASCII以外のデータを含むすべての値(新規行を含む)

次のように、-bパラメータのあるldifコマンドを使用して、バイナリ・データをLDIF形式に変換します。

$ ldif -b attributeName

ldifコマンドの使用方法の詳細は、ldifについての説明のマニュアル・ページを参照してください。

前述の例においてattributeNameは、ユーザーがバイナリ・データを提供する属性名です。バイナリ・データは標準入力から読み込まれ、この結果は標準出力に書き込まれます。リダイレクト演算子を使用して、入力および出力ファイルを選択します。

このコマンドによって、あらゆる入力が取得され、正しい行の継続および適切な属性情報が書式設定されます。このコマンドによって、入力にBase 64エンコードが必要がどうかも判断されます。次の例では、jpegPhotoと命名された属性について、JPEGイメージを含むバイナリ・ファイルを取得してLDIF形式に変換します。この出力はout.ldifに保存されます。

$ ldif -b jpegPhoto < aphoto.jpg> out.ldif

-bオプションによって、ユーティリティが入力全体を単一のバイナリ値として解釈することを指定します。-bオプションがない場合、各行は個別の入力値としてみなされています。

出力ファイルを編集して、バイナリ値を含むディレクトリ・エントリの作成または変更が必要なLDIF文を追加できます。たとえば、テキスト・エディタでファイルout.ldifを開いて、ファイルの最上部に次の行を追加できます。

dn: cn=Barbara Jensen,ou=People,dc=example,dc=com
changetype: modify
add: jpegPhoto
jpegPhoto:: encoded_data

この例ではencoded_dataは、コマンドによって作成されたout.ldifファイルの内容を示しています。

4.2 LDIFのディレクトリ・エントリ

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

4.2.1 LDIFにおける組織エントリ

ディレクトリには、1つ以上の組織エントリが含まれる場合が多くなっています。通常、組織エントリは、ディレクトリにおける最初または、最上位のエントリです。組織エントリは多くの場合、ディレクトリのサフィックスに対応します。たとえば多くの場合、サフィックスo=example.comを使用するために定義されたディレクトリには、o=example.comと命名された組織エントリがあります。

組織エントリを定義するLDIFは、次のように表示されます。

dn: distinguished_name
objectClass: top 
objectClass: organization
o: organization_namelist_of_optional_attributes...

次は、LDIF形式における組織エントリの例です。

dn: o=example.com
objectclass: top
objectclass: organization
o: example.com Corporation
description: Fictional company for example purposes
telephonenumber: 555-5555

次の例における組織名には、カンマが使用されています。

dn: o=example.com Chile\, S.A.
objectclass: top
objectclass: organization
o: example.com Chile\, S.A.
description: Fictional company for example purposes
telephonenumber: 555-5556

次の表には、組織エントリの各要素が記載されています。

表4-2 LDIFにおける組織エントリ

LDIF要素 説明

dn: distinguished_name

必須。エントリの識別名を指定します。

objectClass: top

必須。最上位のオブジェクト・クラスを指定します。

objectClass: organization

組織のオブジェクト・クラスを指定します。この行は、組織としてエントリを定義します。

o: organization_name

組織の名前を指定します。組織名にカンマが含まれる場合、単一のバックスラッシュによってカンマをエスケープするか、または組織の引数全体を引用符で囲む必要があります。ただしUNIXシェルで作業している場合は、バックスラッシュもエスケープする必要があります。したがって、バックスラッシュを2つ使用する必要があります。たとえばサフィックスをexample.com Bolivia, S.A.に設定するには、o: example.com Bolivia\, S.A.を入力します。

list_of_attributes

このエントリに関して保持する属性(オプション)のリストを指定します。


4.2.2 LDIFにおける組織単位エントリ

ディレクトリ・ツリーにおいて、組織単位は主なサブディレクトリを示しています。ディレクトリ・ツリーには通常、複数の組織単位が含まれています。組織単位エントリを定義するLDIFファイルは、次のように表示されます。

dn: distinguished_name
objectClass: top
objectClass: organizationalUnit
ou: organizational_unit_namelist_of_optional_attributes...

次の例は、LDIF形式における組織単位エントリを示しています。

dn: ou=people, o=example.com
objectclass: top
objectclass: organizationalUnit
ou: people
description: Fictional organizational unit for example purposes

次の表では、組織単位エントリの各要素を定義しています。

表4-3 LDIFにおける組織単位エントリ

LDIF要素 説明

dn: distinguished_name

必須。エントリの識別名を指定します。

DNにカンマが含まれている場合は、バックスラッシュ(\)でカンマをエスケープする必要があります。次に例を示します。

dn: ou=people,o=example.com Bolivia\,S.A.

objectClass: top

必須。topオブジェクト・クラスを指定します。

objectClass: organizationalUnit

organizationalUnitオブジェクト・クラスを指定します。この行は、organizationalUnit.としてエントリを定義します。

ou: organizational_unit_name

組織単位の名前を含む属性を指定します。

list_of_attributes

このエントリに関して保持する属性(オプション)のリストを指定します。


4.2.3 LDIFにおける組織の個人エントリ

ディレクトリ内のエントリの多くは、組織の人々を示しています。LDIFでは、組織の個人の定義は次のようになっています。

dn: distinguished_name
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
cn: common_name 
sn: surname
list_of_optional_attributes

次の例は、LDIF形式における組織の個人エントリを示しています。

dn: uid=bjensen,ou=people,o=example.com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: Babs Jensen
sn: Jensen
givenname: Babs
uid: bjensen
ou: Marketing
ou: people
description: Fictional person for example purposes
telephonenumber: 555-5557
userpassword: {sha}dkfljlk34r2kljdsfk9

次の表では、LDIFの個人エントリの各要素を定義しています。

表4-4 LDIFにおける組織の個人エントリ

LDIF要素

説明

dn: distinguished_name

必須。エントリの識別名を指定します。

DNにカンマが含まれている場合は、バックスラッシュ(\)でカンマをエスケープする必要があります。たとえばdn:uid=bjensen,ou=people,o=example.com Bolivia\,S.A.となります。

objectClass: top

必須。topオブジェクト・クラスを指定します。

objectClass: person

personオブジェクト・クラスを指定します。LDAPクライアントの多くが、個人または組織の個人について検索操作を実行中に、このオブジェクト・クラスの指定を必要とするため、この指定は行う必要があります。

objectClass:organizationalPerson

organizationalPersonオブジェクト・クラスを指定します。LDAPクライアントの一部は、組織の個人について検索操作を実行中にこのオブジェクト・クラスの指定を必要とするため、この指定は行う必要があります。

objectClass: inetOrgPerson

inetOrgPersonオブジェクト・クラスを指定します。inetOrgPersonオブジェクト・クラスは最大範囲の属性を含んでいるため、組織の個人エントリの作成にお薦めです。uid属性はこのオブジェクト・クラスによって必要とされ、このオブジェクト・クラスを含むエントリはuid属性値に基づいて命名されます。

cn: common_name

必須。個人の共通名(通常、個人によって使用されているフルネーム)を指定します。たとえばcn: Bill Andersonです。

sn: surname

必須。個人の姓を指定します。たとえばsn: Andersonです。

list_of_attributes

このエントリに関して保持する属性(オプション)のリストを指定します。


4.3 LDIFを使用してディレクトリの定義をするためのガイドライン

次のガイドラインに従って、LDIFを使用してディレクトリを作成します。

次の例は、組織エントリが1つ、組織単位エントリが2つ、および組織の個人エントリが3つあるLDIFファイルを示しています。

例4-2 組織、組織単位、および組織の個人のエントリがあるLDIFファイルの例

dn: o=example.com Corp
objectclass: top
objectclass: organization
o: example.com Corp
description: Fictional organization for example purposes
dn: ou=People,o=example.com Corp
objectclass: top
objectclass: organizationalUnit
ou: People
description: Fictional organizational unit for example purposes
tel: 555-5559

dn: cn=June Rossi,ou=People,o=example.com Corp
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
cn: June Rossi
sn: Rossi
givenName: June
mail: rossi@example.com
userPassword: {sha}KDIE3AL9DK
ou: Accounting
ou: people
telephoneNumber: 2616
roomNumber: 220

dn: cn=Marc Chambers,ou=People,o=example.com Corp
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
cn: Marc Chambers
sn: Chambers
givenName: Marc
mail: chambers@example.com
userPassword: {sha}jdl2alem87dlacz1
telephoneNumber: 2652
ou: Manufacturing
ou: People
roomNumber: 167

dn: cn=Robert Wong,ou=People,o=example.com Corp
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
cn: Robert Wong
cn: Bob Wong
sn: Wong
givenName: Robert
givenName: Bob
mail: bwong@example.com
userPassword: {sha}nn2msx761
telephoneNumber: 2881
roomNumber: 211
ou: Manufacturing
ou: people

dn: ou=Groups,o=example.com Corp
objectclass: top
objectclass: organizationalUnit
ou: groups
description: Fictional organizational unit for example purposes

4.4 複数言語での情報の格納

単一言語を含むディレクトリの場合、ディレクトリに新規エントリを追加するために特別なことをする必要はありません。ただし多国籍の組織の場合、様々なロケールのユーザーが自身の言語でディレクトリ情報を表示できるようにするために、複数言語で情報を格納する必要があります。

情報が複数言語で示される際に、サーバーは言語タグを属性値と関連付けます。新規エントリが追加される際に、RDN(相対識別名)で使用される属性値は言語コードなしで追加される必要があります。

単一の属性に複数言語を格納できます。属性タイプは同じですが、各属性値の言語コードが異なっています。言語タグは、ディレクトリ内に文字列が格納される方法については影響しません。すべてのオブジェクト・クラスおよび属性の文字列は、UTF-8を使用して格納されます。

Directory Serverおよびその関連する言語タグによってサポートされる言語のリストについては、「サポートされるロケールの識別」を参照してください。

たとえば、example.com社は米国およびフランスにオフィスがあります。この企業は、従業員が各自の母国語でディレクトリ情報を表示することを希望しています。ディレクトリ・エントリが新規従業員のBabs Jensen向けに追加される際に、管理者はLDIFでこのエントリを作成します。管理者は、英語およびフランス語で次のように、personalTitle属性に関する値を作成します。

dn: uid=bjensen,ou=people, o=example.com Corp
objectclass: top
objectclass: person
objectclass: organizationalPerson
name: Babs Jensen
cn: Babs Jensen
sn: Jensen
uid: bjensen
personalTitle: Miss
personalTitle;lang-en: Miss
personalTitle;lang-fr: Mlle
preferredLanguage: fr

優先言語を英語に設定しているLDAPクライアントでディレクトリ・エントリにアクセスしているユーザーには、個人の敬称がMissと表示されます。優先言語をフランス語に設定しているLDAPクライアントでディレクトリにアクセスしているユーザーには、個人の敬称がMlleと表示されます。

4.5 LDIF入力を行うためのガイドライン

すべてのディレクトリ・データは、ユニコードのUTF-8エンコーディングを使用することによって格納されます。したがってLDIFのすべての入力は、UTF-8でエンコードされる必要があります。LDIF形式の詳細は、LDAP Data Interchange Format (LDIF) - 技術仕様についての説明に記載されています。

LDIF入力を行うときは、次の点を考慮してください。

4.5.1 コマンドラインへのLDIF入力の終了

ldapmodifyおよびldapdeleteユーティリティによって、ファイルからの読取りとまったく同じように、コマンドの後に入力するLDIF文が読み取られます。入力の完了後に、ファイルの終了(EOF)のエスケープ・シーケンスとしてシェルが認識する文字を入力します。

通常は、EOFエスケープ・シーケンスは[Ctrl]キーを押しながら[D]キーを押します(^D)。

次の例では、ldapmodifyコマンドへの入力を終了する方法を示します。

prompt\> ldapmodify -h host -p port -D cn=admin,cn=Administrators,cn=config -w -
 dn: cn=Barry Nixon,ou=People,dc=example,dc=com
changetype: modify
delete: telephonenumber
^D
prompt\>

簡潔性および移植性の点から、このドキュメントの例では、プロンプトまたはEOFシーケンスを示していません。

4.5.2 特殊文字の使用

コマンドラインにコマンド・オプションを入力する際に、コマンドライン・インタプリタに対して特別な意味を持つ文字(スペース( )、アスタリスク(*)、バックスラッシュ(\\)など)をエスケープする必要となる場合があります。たとえばDNの多くはスペースを含み、多くのUNIXシェルの場合には二重引用符("")で値を囲む必要があります。

このため、ご使用のコマンドライン・インタプリタに応じて、一重引用符または二重引用符のいずれかを使用する必要があります。詳細は、オペレーティング・システムのドキュメントを参照してください。

ldapmodifyコマンドの後ろのLDIF文が、シェルではなくコマンドによって解釈されており、したがって特別な考慮事項は不要であることに留意してください。

4.5.3 属性OIDの使用

属性OIDは属性名において、デフォルトではサポートされていません。これは、Directory Serverの一部の旧バージョンには該当しません。属性OIDをDirectory Serverの旧バージョンで属性名として使用していた場合、受入れ対象の属性OIDについて、属性nsslapd-attribute-name-exceptionsonに設定する必要があります。

4.5.4 スキーマ・チェック

エントリを追加または変更する場合、使用する属性はエントリのオブジェクト・クラスによって要求されるかまたは許可される必要があり、定義された構文と一致する値を含んでいる必要があります。

エントリを変更する際に、Directory Serverでは変更する属性のみでなく、エントリ全体でスキーマ・チェックを実行します。したがって、エントリのいずれかのオブジェクト・クラスまたは属性がスキーマに準拠しない場合、操作が失敗する場合もあります。

4.5.5 LDIFエントリの順序

エントリを追加する場合のLDIFテキストの順序では、コマンドラインまたはファイルのいずかにおいて、親エントは子エントリの前に記述される必要があります。サーバーがLDIFテキストを処理する際に、このように子エントリの前に親エントリを作成します。

たとえばご使用のディレクトリに存在しないPeopleのサブツリーにエントリを作成する場合、サブツリー内のエントリの前にPeopleコンテナを示すエントリを記述します。

dn: dc=example,dc=com
dn: ou=People,dc=example,dc=com
...
People subtree entries...
dn: ou=Group,dc=example,dc=com
...
Group subtree entries...

ldapmodifyコマンドライン・ユーティリティを使用して、ディレクトリに任意のエントリを作成できますが、サフィックスのルートまたはサブサフィックスは、必要な構成エントリと関連付ける必要のある特別なエントリです。

4.5.6 大規模なエントリの管理

極端に大きな属性値を持つエントリを追加または変更するときは、これを受け入れることができるように、事前にサーバーの構成が必要になることがあります。サーバーのオーバロードを防ぐために、デフォルトでは、クライアントは2MBを超えるデータを送信できないように制限されています。

これを超えるエントリを追加するか、属性をこれよりも大きい値に変更しようとすると、サーバーはその動作の実行を拒否し、ただちに接続を閉じます。たとえば、1つのエントリの1つ以上の属性にマルチメディア・コンテンツなどのバイナリ・データが含まれると、この制限を超える可能性があります。

また、大規模なスタティック・グループを定義するエントリに、表記がこの制限を超える多数のメンバーが含まれる可能性があります。ただしパフォーマンス上の理由からこのようなグループはお薦めできず、ディレクトリ構造の再設計を考慮する必要があります。

4.5.7 エラーの処理

コマンドライン・ツールは、LDIF入力に含まれるすべてのエントリまたは変更を、順番に処理します。最初のエラーが発生すると、デフォルトの動作では処理を停止することになっています。エラーに関係なくすべての入力の処理を継続するときは、-cオプションを使用します。エラーの状態は、ツールの出力に表示されます。

前述の考慮事項に加え、一般的なエラーには、次のようなものがあります。

  • 実行する操作に対する適切なアクセス権限がない。

  • ディレクトリにすでに存在するDNで、エントリを追加。

  • 存在しない親の下にエントリを追加。

4.6 ディレクトリの検索

LDAPクライアントを使用して、ディレクトリ内のエントリを検索できます。ほとんどのクライアントには、ディレクトリを検索してエントリ情報を取得できるようにするために、なんらかの形式の検索インタフェースが用意されています。

ディレクトリに設定されたアクセス制御が、検索結果を決定します。通常、一般ユーザーにはディレクトリの多くは表示されず、ディレクトリ管理者が、全データへのすべてのアクセス権(構成を含む)を持っています。

4.6.1 ldapsearchによるディレクトリの検索

ldapsearchコマンドライン・ユーティリティを使用して、ディレクトリ・エントリを検索および取得できます。この項で説明するldapsearchユーティリティは、Solarisプラットフォームで提供されるユーティリティではなく、Directory Server Resource Kitの一部です。

このユーティリティは、指定されたユーザーID(通常は識別名)とパスワードによってサーバーへの接続を開き、検索フィルタに基づいてエントリを検索します。検索範囲には、単一のエントリ、エントリの直接のサブエントリ、またはエントリ・ツリーやサブツリーを含むことができます。

検索結果はLDIF形式で返されます。

4.6.1.1 ldapsearchコマンドラインの形式

ldapsearchを使用する場合は、次の形式を使用してコマンドを入力する必要があります。

ldapsearch [optional_options] [search_filter] [optional_list_of_attributes]

各項目の意味は次のとおりです。

  • optional_optionsは、一連のコマンドラインのオプションを表しています。検索フィルタが存在する場合は、これよりも前に指定する必要があります。

  • search_filterは、-fオプションを使用しているファイルにおいて、LDAP検索フィルタを表しています。

  • optional_list_of_attributesは、スペースで区切られた属性のリストを表しています。属性のリストを指定すると、検索結果で返される属性の数が減少します。この属性のリストは、必ず検索フィルタの後に表示されます。属性のリストを指定しない場合は、ディレクトリ内に設定されたアクセス制御によって許可されたすべての属性(操作属性を除く)の値が検索によって返されます。


注意:

検索操作の結果として操作属性を返すようにする場合は、検索コマンドでこれらを明示的に指定する必要があります。明示的に指定された操作属性に加えて通常の属性も取得するには、ldapsearchコマンドの属性リスト内でアスタリスク(*)を使用します。


4.6.1.2 特殊文字の使用方法

ldapsearchコマンドライン・ユーティリティを使用する場合に、コマンドライン・インタープリタにとって特別な意味を持つ文字(空白[ ]、アスタリスク[*]、バックスラッシュ[\\]など)を含む値の指定が必要になることがあります。特殊文字を指定する場合は、その値を引用符("")で囲みます。次に例を示します。

-D "cn=Charlene Daniels,ou=People,dc=example,dc=com"

このために、ご使用のコマンドライン・インタプリタに応じて、一重引用符または二重引用符のいずれかを使用します。詳細は、ご使用のシェルのドキュメントを参照してください。

4.6.2 ldapsearchの例

ここで示す一連の例では、次の前提があるものとします。

  • ディレクトリ内のすべてのエントリの検索を実行しようとしています。

  • サーバーのホスト名はmyServerです。

  • このサーバーが使用しているポート番号は、5201です。

  • ディレクトリにname="DirAdminDN" content="cn=admin,cn=Administrators,cn=config"としてバインドされています。記号"-"の使用は、コマンドラインにパスワードの入力を求められることを示しています。

  • SSLが、ポート636(デフォルトのSSLポート番号)のサーバーで有効です。

  • すべてのデータの格納されているサフィックスは、dc=example,dc=comです。

4.6.2.1 すべてのエントリを返す

前述の情報が提供された場合は、次の呼出しによってディレクトリ内のすべてのエントリを返すことができます。

ldapsearch -h myServer -p 5201 -D cn=admin,cn=Administrators,cn=config
 -b "dc=example,dc=com" -s sub "(objectclass=*)"

"(objectclass=*)"は、ディレクトリ内のすべてのエントリと一致する検索フィルタです。

4.6.2.2 コマンドラインでの検索フィルタの指定

検索フィルタはコマンドラインから直接指定できます。この場合、フィルタを引用符で囲むことを忘れないでください("filter")。また、-fオプションは指定しません。

次に例を示します。

ldapsearch -h myServer -p 5201 -D cn=admin,cn=Administrators,cn=config -w -
 -b "dc=example,dc=com" "(cn=Charlene Daniels)"

4.6.2.3 ルートDSEエントリの検索

ルートDSEエントリは、サポートされているサフィックスのリストや使用可能な認証メカニズムなど、現在のサーバー・インスタンスに関連する情報を含む特別なエントリです。検索ベース""を指定することで、このエントリを検索できます。また、検索範囲base、およびフィルタ"(objectclass=*)"を指定する必要があります。

次に例を示します。

ldapsearch -h myServer -p 5201 -D cn=admin,cn=Administrators,cn=config -w -
 -b "" -s base "(objectclass=*)"

4.6.2.4 スキーマ・エントリの検索

Directory Serverでは、特別なcn=schemaエントリ内にすべての Directory Serverスキーマが格納されています。このエントリには、ご使用のディレクトリ・サーバーに対して定義されたすべてのオブジェクト・クラスと属性に関する情報が含まれています。

このエントリの内容を調べるには、次のように指定します。

ldapsearch -h myServer -p 5201 -D cn=admin,cn=Administrators,cn=config
 -b "cn=schema" -s base "(objectclass=*)"

注意:

厳密に準拠する場合は、指定されたエントリのスキーマ・サブエントリの場所は、subschemaSubentry操作属性によって指定されます。このバージョンのDirectory Serverでは、この属性の値は常にcn=schemaです。


4.6.2.5 LDAP_BASEDNの使用方法

検索を簡単に行うために、LDAP_BASEDN環境変数を使用して検索ベースを設定できます。これによって、-bオプションによる検索ベースの指定を省略できます(環境変数の設定方法については、オペレーティング・システムのドキュメントを参照)。

通常、ディレクトリのサフィックスの値にはLDAP_BASEDNを設定します。ディレクトリのサフィックスはルート、つまりディレクトリの最上位のエントリと等しいため、この設定によってすべての検索がディレクトリのルート・エントリから開始されます。

たとえばLDAP_BASEDNdc=example,dc=comに設定した場合、次のコマンドラインの呼出しを使用すると、ディレクトリ内で(cn=Charlene Daniels)を検索することができます。

ldapsearch -h myServer -p 5201 -D cn=admin,cn=Administrators,cn=config -w -
 "(cn=Charlene Daniels)"

この例では範囲の指定に-sオプションが使用されていないので、subのデフォルト範囲が使用されます。

4.6.2.6 属性のサブセットの表示

ldapsearchコマンドでは、すべての検索結果がLDIF形式で返されます。デフォルトではldapsearchは、エントリの識別名と読取りを許可されたすべての属性を返します。指定したディレクトリ・エントリの属性のサブセットの読取りのみが許可されるように、ディレクトリのアクセス制御を設定できます。操作属性のみが返されません。検索操作の結果として操作属性を返すようにする場合は、検索コマンドでこれらを明示的に指定する必要があります。操作属性の詳細は、TODO: AdminServerAdminGuideの不使用に関する説明を参照してください。

検索結果で返された属性のすべてを表示するわけではない場合を考えてみます。返された属性をいくつかの特定の属性に制限するには、検索フィルタのすぐ後のコマンドラインで、必要な属性を指定します。たとえば、ディレクトリのすべてのエントリについてcn属性とsn属性を表示するには、次のコマンドを使用します。

ldapsearch -h myServer -p 5201 -D cn=admin,cn=Administrators,cn=config -w -
 "(objectclass=*)" sn cn

この例では、LDAP_BASEDNを使用して検索ベースを設定することを前提としています。

4.6.2.7 複数値属性の検索

Directory Serverは検索時に、複数値属性を必ずしもソート順で返すわけではありません。たとえば、変更を適用する前にサーバーを再起動することを要求するcn=configで、構成属性を検索する場合を考えてみます。

ldapsearch -h myServer -p 5201 -D cn=admin,cn=Administrators,cn=config -w -
 -b cn=config "(objectclass=*)" nsslapd-requiresrestart

次のような結果が返されます。

dn: cn=config
nsslapd-requiresrestart: cn=config:nsslapd-port
nsslapd-requiresrestart: cn=config:nsslapd-secureport
nsslapd-requiresrestart: cn=config:nsslapd-plugin
nsslapd-requiresrestart: cn=config:nsslapd-changelogdir
nsslapd-requiresrestart: cn=config:nsslapd-changelogsuffix
nsslapd-requiresrestart: cn=config:nsslapd-changelogmaxentries
nsslapd-requiresrestart: cn=config:nsslapd-changelogmaxage
nsslapd-requiresrestart: cn=config:nsslapd-db-locks
nsslapd-requiresrestart: cn=config:nsslapd-return-exact-case
nsslapd-requiresrestart: cn=config,cn=ldbm database,cn=plugins,
  cn=config:nsslapd-allidsthreshold
nsslapd-requiresrestart: cn=config,cn=ldbm database,cn=plugins,
  cn=config:nsslapd-dbcachesize
nsslapd-requiresrestart: cn=config,cn=ldbm database,cn=plugins,
  cn=config:nsslapd-dbncache
nsslapd-requiresrestart: cn=config,cn=ldbm database,cn=plugins,
  cn=config:nsslapd-directory
nsslapd-requiresrestart: cn=encryption,cn=config:nssslsessiontimeout
nsslapd-requiresrestart: cn=encryption,cn=config:nssslclientauth
nsslapd-requiresrestart: cn=encryption,cn=config:nssslserverauth
nsslapd-requiresrestart: cn=encryption,cn=config:nsssl2
nsslapd-requiresrestart: cn=encryption,cn=config:nsssl3
...

このように、nsslapd-requiresrestart属性は複数の値を取得します。ただし、これらの値はソートされていません。複数値属性をソート順にする必要があるアプリケーションを開発する場合は、アプリケーションでソートを実行するようにします。

4.6.2.8 検索時のクライアント認証の使用方法

次の例は、クライアント認証を使用してディレクトリ検索を行うユーザーのcdanielsを示しています。

ldapsearch -h myServer -p 636 -b "dc=example,dc=com"
  -N  "cdanielsscertname" -Z -W certdbpassword
  -P /home/cdaniels/certdb/cert.db "(givenname=Richard)"

4.6.3 LDAP検索フィルタ

検索フィルタは、検索操作に対して返されるエントリを選択します。これらは一般的に、ldapsearchコマンドライン・ユーティリティによって使用されます。ldapsearchを使用する場合は、各フィルタをファイル内の個別の行にしてファイル内に複数の検索フィルタを配置するか、コマンドラインで直接検索フィルタを指定することができます。

たとえば、次のフィルタでは、共通名Lucie Du Boisの検索を指定しています。

(cn=Lucie Du Bois)

この検索フィルタでは、共通名Lucie Du Boisを含むすべてのエントリが返されます。共通名の値の検索では、大文字と小文字は区別されません。

共通名属性に言語タグに関連付けられた値が存在する場合は、すべての値が返されます。したがって、次の2つの属性値はどちらもこのフィルタに一致します。

cn: Lucie Du Bois
cn;lang-fr: Lucie Du Bois

4.6.3.1 検索フィルタの構文

検索フィルタの基本構文は次のとおりです。

(attribute operator value)

次に例を示します。

(buildingname\>=alpha)

この例では、buildingnameは属性、\>=は演算子、およびalphaは値です。ブール演算子によって異なる属性を組み合せて使用するように、フィルタを定義することもできます。

4.6.3.2 検索フィルタでの属性の使用

エントリを検索するときに、そのエントリのタイプに関連付けられた属性を指定することができます。たとえば人のエントリを検索する場合は、cn属性を使用して特定の共通名を持つ人を検索することができます。

人のエントリが含まれる属性の例には、次のようなものが挙げられます。

  • cn(その人の共通名)

  • sn(その人の姓)

  • telephoneNumber(その人の電話番号)

  • buildingName(その人が居住する建物名)

  • l(その人が存在する場所)

4.6.3.3 検索フィルタでの演算子の使用方法

表4-5は、検索フィルタで使用できる演算子をリスト表示したものです。

表4-5 検索フィルタの演算子

検索タイプ 演算子 説明

等価

=


指定した値と正確に一致する属性値を含むエントリを返します。例: cn=Bob Johnson

部分文字列

=string*string

指定した部分文字列を含む属性を含む、エントリを返します。次に例を示します。

cn=Bob*cn=*Johnsoncn=*John*cn=B*John

(アスタリスク(*)はゼロ(0)個以上の文字を示します。)

以上

\>=

指定した値より大きいかそれと等しい属性を含むエントリを返します。次に例を示します。

buildingname \>= alpha

以下

<=


指定した値より小さいか、それと等しい属性を含むエントリを返します。次に例を示します。

buildingname <= alpha

プレゼンス

=*


指定した属性について1つ以上の値を含むエントリを返します。次に例を示します。

cn=*

telephonenumber=*

manager=*

近似

~=

検索フィルタで指定した値と近似した値を持つ、特定の属性を含むエントリを返します。次に例を示します。

cn~=suret

l~=san fransico

次が返される可能性があります

cn=sarette

l=san francisco

近似演算子は試験的なもので、英語の文字列でしか使用できません。ASCIIベース以外の文字列(Ja、Znなど)では動作しません。


dn属性に対する検索機能を拡張し(たとえばcn:dn:=John)、国際的な検索をサポートするために拡張された演算子も存在します。

4.6.3.4 検索フィルタでのOIDの使用方法

LDAPv3を使用すると、特定の属性に対してマッチ演算子とルールを構築することができます。一致ルールは、属性の値を特定の構文と比較する方法を定義しています。すなわち一致ルールとは、一致する可能性のある属性を比較する方法を定義したものです。たとえば一致ルールは、属性を比較するときにテキストの大文字小文字を考慮するかどうかを定義できます。

ルールが作成されると、検索フィルタで参照されます。

たとえば次の検索フィルタは、OID2.5.13.5で指定される一致ルールを使用して、姓Jensenを含むエントリを比較します。

(sn:2.5.13.5:=Jensen)

次の例では、:dn表記を使用して、比較時にOID2.5.13.5を使用することと、一致を評価する場合にエントリ\qsの識別名の属性をエントリの一部として考慮することを示しています。

(sn:dn:2.5.13.5:=Jensen)

4.6.3.5 複合検索フィルタの使用方法

プリフィクス表記内で次のように表現されるブール演算子を使用して、複数の検索フィルタ・コンポーネントを組み合せることができます。

(Boolean-operator(filter)(filter)(filter)...)

このBoolean-operatorは、表4-6に一覧表示されているブール演算子のいずれかになります。

ブール演算子を組み合せて相互にネストすることで、次のような複雑な式を作成できます。

(Boolean-operator(filter)(Boolean-operator(filter)(filter)))

検索フィルタで使用できるブール演算子には、次のようなものがあります。

表4-6 検索フィルタのブール演算子

演算子 記号 説明

AND

&


文がtrueになるためには、指定したすべてのフィルタがtrueである必要があります。次に例を示します。

(&(filter)(filter)(filter)...)

OR

|


文がtrueになるには、指定したフィルタの少なくとも1つがtrueである必要があります。次に例を示します。

(|(filter)(filter)(filter)...)

NOT

!

文がtrueになるためには、指定した文がtrueではない必要があります。NOT演算子によって影響を受けるのは、1つのフィルタだけです。次に例を示します。

(!(filter))

NOT演算子を使用すると、索引付けされていない検索となります。


ブール式は、次の順序で評価されます。

  • 内側のカッコでくくられた式から外側のカッコでくくられた式へ

  • すべての式を左から右へ

4.6.3.6 ファイルを使用した検索フィルタの指定

検索フィルタは、コマンドラインではなく、ファイルに入力できます。この場合、各検索フィルタをファイル内の個別の行に指定します。ldapsearchコマンドは、ファイル内に現れる順序で各検索を実行します。

たとえば、ファイルに次が含まれているとします。

(sn=Daniels)
(givenname=Charlene)

この場合、ldapsearchは最初にDanielsという姓を持つすべてのエントリを検索し、次にCharleneという名を持つすべてのエントリを検索します。両方の検索条件に一致するエントリが見つかると、そのエントリは2回返されます。

たとえば、前述の検索フィルタをsearchdbという名前のファイル内で指定して、LDAP_BASEDNを使用して検索ベースを設定したとします。次によって、どちらかの検索フィルタに一致するすべてのエントリが返されます。

ldapsearch -h myServer -p 5201 -D cn=admin,cn=Administrators,cn=config -w -
 -f searchdb

ここで返される属性セットを制限するには、検索行の末尾で属性名を指定します。たとえば、次のldapsearchコマンドは両方の検索を実行しますが、各エントリのDNと、givenname、およびsn属性だけを返します。

ldapsearch -h myServer -p 5201 -D cn=admin,cn=Administrators,cn=config -w -
 -f searchdb sn givenname

4.6.3.7 検索フィルタの7ビット以外のASCII文字の指定

検索フィルタの7ビット以外のASCII文字は、文字表現で置き換える必要があります(UTF-8エンコードの各バイトの前にバックスラッシュが入ります。)。UTF-8では、文字は各バイトに対して16進コードで表現されます。

たとえば、文字éをUTF-8で表現するとc3a9になります。この場合、検索フィルタではé\\c3\\a9と表します。したがってcn=Véronique Martinを検索するには、次のように指定します。

ldapsearch -h myServer -b "dc=example,dc=com" "(cn=V\\c3\\a9ronique Martin)"

表4-7にリスト表示されている特殊文字は、検索フィルタで使用された場合、次の方法で表現される必要があります。

表4-7 検索フィルタの特殊文字

特殊文字 特殊文字を使用した値 フィルタの例

*


Five*Star

(cn=Five\\2aStar)

\\


c:\\File

(cn=\\5cFile)

()

John (2nd)

(cn=John \\282nd\\29)

null

0004

(bin=\\00\\00\\00\\04)


4.6.3.7.1 検索フィルタ内の識別名のエスケープ文字

Directory Serverの任意の箇所でDNを使用する場合、コンマとその他の特定の特殊文字はバックスラッシュ(\\)でエスケープする必要があります。検索フィルタでDNを使用する場合、DN内の特殊文字をエスケープするために使用されるバックスラッシュは\\5cと表します。次に例を示します。

DN: cn=Julie Fulmer,ou=Marketing\\,Bolivia,dc=example,dc=com

検索フィルタのDN: ldapsearch -h myServer -b "dc=example,dc=com" "(manager=cn=Julie Fulmer,ou=Marketing\\5c,Bolivia,dc=example,dc=com)"

4.6.4 検索フィルタの例

次のフィルタでは、manager属性について1つ以上の値を含むエントリを検索します。これは、プレゼンス検索とも呼ばれるものです。

(manager=*)

次のフィルタでは、共通名Ray Kultgenを含むエントリを検索します。これは、これは等価検索とも呼ばれるものです。

(cn=Ray Kultgen)

次のフィルタでは、部分文字列X.500を含むdescription属性を含むすべてのエントリが返されます。

(description=*X.500*)

次のフィルタでは、組織単位がMarketingで、説明フィールドに部分文字列X.500を含まないすべてのエントリが返されます。

(&(ou=Marketing)(!(description=*X.500*)))

次のフィルタでは、組織単位がMarketingで、Julie FulmerまたはCindy Zwaskaがマネージャーとして存在するすべてのエントリが返されます。

(&(ou=Marketing)(|(manager=cn=Julie Fulmer,ou=Marketing,
 dc=example,dc=com)(manager=cn=Cindy Zwaska,ou=Marketing,
 dc=example,dc=com)))

次のフィルタでは、人を表さないすべてのエントリが返されます。

(!(objectClass=person))

前述のフィルタは、パフォーマンスに悪影響を及ぼすので、複雑な検索の一部として使用します。次のフィルタでは、人を表さず、かつ共通名がprinter3bと近似しているすべてのエントリが返されます。

(&(cn~=printer3b)(!(objectClass=person)))

4.6.4.1 操作属性の検索

検索操作の結果として操作属性を返すようにする場合は、検索コマンドでこれらを明示的に指定する必要があります。

$ ldapsearch -h myServer -p 5201 -D cn=admin,cn=Administrators,cn=config -w -
 "(objectclass=*)" aci

明示的に指定された操作属性に加えて通常の属性も取得するには、操作属性にアスタリスク(*)を追加して指定します。次に例を示します。

$ ldapsearch -h myServer -p 5201 -D cn=admin,cn=Administrators,cn=config -w -
 "(objectclass=*)" aci *