14.8 LDAPサーバを使ってディレクトリを検索する

14.8.1 検索制限を設定する

LDAPサーバオブジェクトの次の属性により、LDAPサーバのディレクトリ検索方法を制御することができます。

  • 検索エントリの制限

    検索のサイズを制限します。デフォルトは0で、サイズの制限はありません。LDAPサーバの負荷が大きくなりすぎないように、検索要求に対してLDAPサーバが返すエントリ数を制限できます。

    シナリオ:検索のサイズを制限する— ユーザは、検索結果が何千件にもなりそうな、あるオブジェクトの検索を要求します。ただし、検索結果は10件に制限してあります。LDAPサーバは10件の検索結果を返すと検索を中止します。一致するデータがまだ存在しているが、検索が終了されたことを告げるシステムメッセージが表示されます。

  • 結果送信時間

    サーバが検索を行う時間を制限します。デフォルトは0秒です。これは時間制限がないことを表します。

次の図は、NetIQ iManagerにおけるこれらの属性を示します。

LDAPサーバ属性
  1. iManagerで、[役割およびタスク]ボタン [役割およびタスク]ボタンをクリックします。

  2. LDAP]>[LDAPオプション]>[LDAPサーバの表示]の順にクリックします。

  3. [LDAPサーバオブジェクト]>[検索]の順にクリックします。

  4. 制限セクションをスクロールして値を入力し、[OK]をクリックします。

クライアントも、検索要求に制限を設定することもできます(たとえば検索を2秒に制限するなど)。クライアントの制限がサーバの制限と競合する場合、LDAPサーバは値が小さい方の要求を採用します。

検索は、アクセス制御リスト(ACL)に基づいて実行されます。このため、匿名検索の場合は、ディレクトリに何千というエントリが存在していても、Public権で見ることのできるごく一部のエントリしか返されないことがあります。

14.8.2 参照を使用する

参照は、名前を解決するためのクライアント中心の方法です。LDAPクライアントがLDAPサーバに要求を送信すると、LDAPサーバは要求操作のターゲットエントリをローカルに見つけようとします。LDAPサーバはターゲットエントリを見つけられないと、所有する知識参照を使用して、そのエントリについてのより多くの知識を持つ第2のLDAPサーバへの参照を生成します。第1のサーバは、参照情報をLDAPクライアントに送信します。

次に、LDAPクライアントは第2のLDAPサーバへ接続し、操作を再実行します。第2のLDAPサーバが操作のターゲットエントリを保持している場合は、そのサーバが操作を実行します。エントリを保持していない場合は、第2のLDAPサーバもまた参照をクライアントに送信します。この操作は、次のいずれかの状況になるまで続けられます。

  • クライアントがターゲットエントリを保持するサーバと接続し、要求する操作が実行できる。

  • LDAPサーバが、エントリは存在しないとのエラーを返す。

  • LDAPサーバがこれ以上参照先がないことを通知する。

LDAP for eDirectory 8.7で導入された機能により、参照の動作が以前のバージョンのeDirectoryおよびNDSから少し変更されました。これにより、LDAPサービスの環境設定方法も変更されました。

デフォルトの参照

通常、デフォルトの参照URLには、ツリーのルートを保持するサーバを指すLDAP URLが含まれています。LDAP URLの形式はldap://ホスト:ポートです。

[デフォルト参照URL]フィールドに、デフォルトの参照先を入力します。

[デフォルト参照URL]フィールド

これまで、eDirectory LDAPサーバは、多くのフェイルオーバー時にデフォルトの参照先を送信していました。これが、この動作を予期しないユーザを混乱させる結果になっています。そこで、LDAP Services for eDirectoryでは、サブオーディネート参照で、どんな場合にデフォルトの参照先が送信されるかを指定できるようになりました。

この新しいオプションは、LDAPサーバオブジェクトとLDAPグループオブジェクトのldapDefaultReferralBehavior属性の値(設定)で指定します。値は次のビットのビットマスクである整数です。

ビット

0x00000001

ベースDNが見つかりません

0x00000002

ベースDNは、利用できないeDirectoryサーバ上にあります

0x00000004

検索スコープのエントリは、利用できないeDirectoryサーバ上にあります

LDAPサーバがその操作に対して「常に参照する」に設定されており、リストされたいずれかの条件と一致し、対応する値が設定されている場合、デフォルトの参照先が返されます。

検索操作の参照先を設定する

LDAP for eDirectory 8.7で導入された機能により、参照の動作が以前のバージョンのeDirectoryおよびNDSから少し変更されました。これにより、LDAPサービスの環境設定方法も変更されました。

eDirectoryツリー内の他のeDirectoryサーバに参照先を返すようにeDirectory LDAPサーバを設定することができます。デフォルトでは、LDAPサーバはユーザに代わってすべての操作を他のeDirectoryサーバにチェーンし、参照先は返しません。

eDirectory 8.7より以前は、参照先オプションの設定はLDAPグループオブジェクトでだけしか使用できませんでした。eDirectory 9.0では、LDAPサーバオブジェクトにもこれらのオプションを設定することができるようになりました。LDAPサーバオブジェクトの設定により、LDAPグループオブジェクトの設定は上書きされます。

dapSearchReferralOption属性を操作することにより、照会先オプションを設定することができます。LDAP Services for eDirectory 8.7より以前は、この属性を次のオプションに設定することができました。

これらの参照オプションは、eDirectoryツリー内の他のeDirectoryサーバの参照およびチェーンでだけ使用できます。この設定は、信頼されていないパーティションからの参照は制御しません。そのため、[照会先オプション]ドロップダウンリストでオプション([常にチェーンする]など)を選択しても、他のサーバの信頼されていないパーティションからは参照先が送信されます。

LDAP Services for eDirectory 8.7.aでは[常にチェーンする]オプションにより、eDirectory DSA以外の上方参照がサポートされています。詳細については、常にチェーンするを参照してください。

次の図は、検索およびその他の操作に使用する[LDAP参照]ドロップダウンリストを示しています。

LDAP参照オプション

eDirectory操作にはこの他に、「追加」、「削除」、「編集」、「バインド」の各操作の参照があります。

常にチェーンする

[常にチェーンする]オプションは、「まったく参照しない」ように設定するオプションです。このオプションを選択すると、eDirectory LDAPサーバは、eDirectoryツリー内にある他のeDirectoryサーバに参照先を返しません。LDAPサーバは、要求を出したクライアントに代わって他のLDAPサーバをチェックし、クライアントに参照先を返します。

[常にチェーンする]オプションは、eDirectoryをグローバル連結ツリーのサブオーディネートサーバとして使用している場合に適しています。

この参照先オプションは、eDirectoryツリー内の参照先の処理設定にのみ使用します。このオプションがeDirectoryサーバ以外のサーバの参照の動作に影響することはありません。

他のディレクトリサーバへの参照をブロックすることにあまり意味はありませんが、これが重要になる場合もあります。eDirectory 8.7以降のサーバ上の信頼されていないデータを古いバージョンのeDirectoryサーバ上で複製すると、古いサーバを参照したときにクライアントアプリケーションのグローバルツリーが歪んで表示されることがあります。

たとえば、LDAPクライアントはLDAPサーバの参照をキャッシュし、最後に通信したサーバに要求を送信するとします。クライアントが上方参照をサポートするeDirectoryサーバに要求を送信するよう設定されている場合、クライアントのグローバルツリーは正常に表示されます。

しかし、eDirectory 8.7以前のLDAPサーバは、信頼されていない領域と上方参照を認識しません。このため、クライアントがeDirectoryツリー内の以前のバージョンのeDirectoryサーバの参照に従い、要求をそのサーバに送信し続けると、以前のバージョンのLDAPサーバにより、信頼されていないデータが実際のディレクトリツリーデータであるかのように表示されてしまいます。

ただし、クライアントによっては、RootDSEのsupportedFeatures属性を取得し、サーバが上方参照をサポートしているか確認するものもあります。

チェーンを優先する

[チェーンを優先する]オプションを選択すると、通常、検索操作で参照先は返されません。LDAPサーバはその代わり、すべてのeDirectory DSAに対する検索操作を実行します。

ただし、持続的検索制御を設定して検索を実行する場合は例外となります。NetIQが実装する持続的検索ではチェーンがサポートされていないため、検索スコープがローカルに限られていなければ参照が送信されます。

LDAPサーバが検索操作を受信します。ツリーのエントリがローカルに格納されていない場合、サーバは自動的に他のサーバにチェーンします。エントリの検出後、LDAPサーバはLDAPクライアントのプロキシとして機能します。LDAPサーバはLDAPクライアントがバインドされたものと同じ識別情報を使用してリモートサーバの認証を受け、そこで検索操作を続行します。

最初に要求を受信したLDAPサーバが、LDAPクライアントにすべての検索エントリと検索結果を送信します。このLDAPサーバが要求をすべて処理するため、LDAPクライアントからは他のサーバが関与していることはわかりません。

eDirectoryでチェーンを使用すると、あるLDAPサーバに多くのデータがない場合でも、そのサーバがツリー全体のデータを保持しているかのように見えます。

[チェーンを優先する]は、パーティションに深くかかわるオプションです。

シナリオ:他のパーティションで情報を探す— Digital Airlines社で、ユーザがLDAPサーバDAir43に[チェーンを優先する]オプションを選択しました。DAir43はパーティションAにあります。パーティションBはAのサブパーティションで、LDAPサーバDAir44はこのパーティションにあります。

あるLDAPクライアントが検索を要求します。DAir43は、エントリをローカルで検索しますが、データが一部しか見つかりません。DAir43は、要求されたエントリを持つDigitalAir44に自動的にチェーンします。DAir44は、DAir43にデータを送信し、DAir43は、LDAPクライアントにエントリを送信します。

[チェーンを優先する]オプションを使用すると、操作が持続的検索である場合を除き、LDAPサーバは必要に応じて検索を他のサーバにチェーンします。持続的検索の詳細については、「セクション 14.10, 持続的検索: eDirectoryイベントの設定」を参照してください。

参照を優先する

[参照を優先する]オプションを選択すると、必要に応じ、参照の検索結果がeDirectoryツリー内の他のeDirectoryサーバに返されます。この参照は、データを持つサーバが動作可能であり、LDAPサービスが稼動していることをローカルサーバが確認した場合のみ送信されます。それ以外の場合、操作は他のサーバにチェーンされるか、他のサーバが動作していない場合は処理に失敗します。

パーティションが2つあり、サブツリー検索を実行するとします。ローカルサーバから検索エントリがすべて検出されるまで検索が実行されます。そこで、今度は他のサーバの検索を実行します。データのレプリカ(そのパーティション)を持つサーバがnldap.nlmも実行している場合、LDAPサーバはLDAP参照を確立し、それをLDAPクライアントに返します。

レプリカのあるサーバがnldap.nlmを実行していない場合、LDAPサーバは要求を他のサーバにチェーンし、そこで検索を完了します。

nldap.nlmが起動されると、LDAPサーバはそのLDAPサーバが参照先となっているeDirectoryと通信します。クライアントが参照を受信したのに、その参照が停止した場合は、LDAPサーバが実行されていません。

常に参照する

[参照を優先する]オプションは、デフォルト参照がさまざまなフェイルオーバー(たとえば、オブジェクトが見つからなかったり、サーバがダウンしているなど)の状況で送信される場合を除き、[参照を優先する]と同じロジックに従います。

残りのデータのある他のサーバでLDAPサービスが実行されていない場合、最初のLDAPサーバは要求を第2のサーバへチェーンしません。

[常に参照する]オプションを設定している場合には、デフォルト参照を指定することができます。[デフォルトの照会先]フィールドで2つの異なるベンダのLDAPサーバを結合し、独自のディレクトリツリーを構築することができます。

シナリオ:デフォルトのサーバを使用する— 1つのLDAPツリーがあるとします。ツリーの一部にはeDirectoryのサービスが適用されています。サブオーディネイトパーティションにはiPlanetのサービスが実行されています。[デフォルトの照会先]フィールドに、iPlanetサーバのURLを入力します。あるLDAPクライアントが検索を要求します。

ベースDNを解決できないため、LDAPサーバは[デフォルトの照会先]フィールドに入力された文字列をクライントに送ります。LDAPクライアントはこの参照のURLで指定された場所を参照してiPlanetサーバに接続し、ここで検索は完了します。

デフォルト参照が設定されており、サーバが探しているベースDNを見つけられない場合、クライアントはデフォルト参照を受け取ります。

参照の形式は、LDAP URLです。例: LDAP://123.23.45.6:389

LDAPサーバがデフォルト参照をクライアントに送信するとき(ベースDNが利用できない場合)は、サーバはこれにスラッシュ(/)とクライアントが検索中のDNを追加します。デフォルト参照と追加された情報がクライアントに送信されます。クライアントはデフォルト参照で指定したサーバに検索要求を送信します。

LDAPグループオブジェクトには、デフォルト参照の文字列フィールドがあります。LDAPサーバは、そのデータを文字列として扱います。このとき、確認は行われません。入力された文字列が、参照の先頭に追加されます。また、なんらかのデータが参照に追加されます。LDAPサーバが受け入れる文字列の形式は、URLのような形式になります。

LDAPが実行されている他のeDirectoryサーバの参照がクライアントに返されるとき、クライアントは1つのサーバにつき2つの参照を受信します。

  • クライアントをクリアテキストポートに導く参照

  • クライアントをセキュアポートに導く参照

2つの参照を区別するために、クリアテキスト参照にはldap://、セキュアポートの表示にはldaps://が付きます。

サーバからの参照の場合は、ポート番号を追加します。

他の操作の参照を設定する

履歴参照オプション設定は通常、検索操作にのみ使用します。他の処理に比較オプションを適用する場合は、ldapOtherReferralOption属性が使用されます。この属性により、同じ値を使って検索以外の操作の動作を制御できます(参照を送信しないバインドは除きます)。

参照フィルタリング

ツリーで実行されている複数のレプリカサーバがあり[参照を優先する/常に照会]オプションを使用して参照を返すようにLDAPサーバを設定してある場合、要求された操作内のDNによって識別されるオブジェクトがローカルに存在しないと、LDAPサーバは参照を返します。そのような場合、LDAPクライアントはサーバに要求を送信し、サーバはそのオブジェクトを保持しているすべてのLDAPサーバの参照リストを返します。この参照リストを使用して、LDAPクライアントはこれらの参照のいずれかに従って操作を実行します。クライアントがリソース不足のサーバまたは低速リンクを経由するサーバへの参照に従うことを選択した場合、クライアントはサーバから応答が遅いと認識する場合があります。この場合、LDAPクライアントのパフォーマンスが影響を受けます。LDAPアプリケーション開発者はサーバとネットワークの構成に関する完全な知識を持っていないため、この問題の解決策は、LDAPサーバに参照フィルタリングメカニズムを提供し、特定のサーバの参照を返すことです。管理者は、ネットワークおけるLDAPサーバの性質やネットワークリンクの速度など、必要な知識を持ち、参照フィルタリングの適切な設定を行うことができる場合があります。

属性「referralIncludeFilter」と「referralExcludeFilter」を使用して、LDAPグループオブジェクトに参照フィルタを設定します。これらの属性でこれらのフィルタを設定すると、このLDAPグループオブジェクトに属するすべてのLDAPサーバにこの設定が適用されます。LDAPサーバは、referralIncludeListフィルタに一致するすべてのLDAP参照を返し、referralExcludeFilterフィルタに一致するものをドロップします。

referralIncludeFilterのみを指定した場合、referralIncludeFilter値に一致するLDAP参照がLDAPクライアントに返され、それ以外のすべての参照は参照リストから除外されます。同様に、referralExcludeFilterのみを指定した場合、referralExcludeFilter値に一致しないLDAP参照がLDAPクライアントに返されます。両方のフィルタが存在し、参照がこれらのフィルタのどちらにも一致しない場合、参照は除外されます。

使用可能なすべての参照がフィルタによって許可されていない場合、サーバは使用可能な参照がないかのように動作し、LDAP_OTHER (80)を返します。一部のクライアントツールはこれを「不明なエラー」としてレポートします。これらのフィルタ属性を追加または変更した後、LDAPサーバがリフレッシュされなかった場合、変更内容は次の自動リフレッシュ後に有効になります。

現時点では、これらのフィルタ属性の追加または変更は、iManagerのタブでのみ実行できます。

LDAP参照フィルタリングを指定する形式 —LDAP参照フィルタの形式は、次の単純なIPアドレス形式です。

[ldap://] | [ldaps://] IPAdress[:port]

ここで、クリアテキストポートまたはTLSポートを指定することは、先頭にldap://またはldaps://文字列を付加することと同じです。ldapまたはldapsのどちらも指定しない場合、一致検索フィルタはクリアテキスト参照とTLS参照の両方に適用されます。

例:

説明

1.2.3.4

# 任意のポートでLDAPとLDAPSの両方の参照に一致

1.2.

# 1.2.X.YというすべてのIPアドレスに一致

1.2.3.

# 1.2.3.YというすべてのIPアドレスに一致

ldap://またはldap://*

# すべてのクリアテキストポートLDAP参照に一致

ldaps://またはldaps://*

# すべてのSSLポートLDAP参照に一致

*

# すべてに一致

ldaps://5.6.7.8:636

# 5.6.7.8というIPアドレスのSSLポート636に一致

これらのフィルタ属性(referralIncludeFilterおよびreferralExcludeFilter)は複数値です。必要な数の一致フィルタを選択できます。

サンプルシナリオ

  • LDAPサーバが1.2.X.YというIPアドレス(X = {0~255}およびY = {0~255})の参照のみを返し、他のすべてを除外するには、次のように入力します。

    referralIncludeFilter = { 1.2 }

  • LDAPサーバが164.99.X.YというIPアドレス(Xは100以外)に一致するすべての参照を除外し、164.99.100.Yに一致する参照を返すには、次のように入力します。

    referralIncludeFilter = { 164.99.100., "*"}

    referralExcludeFilter = { 164.99. }

    ここで、IPアドレス164.99.100.YはreferralExcludeFilterに一致しますが、これらのIPアドレスはreferralIncludeFilterとより多くのフィールドで一致するため、これらの参照はLDAPクライアントに返されます。

    メモ:部分的なIPアドレスを指定する際、末尾の「.」は省略できます。

  • LDAPサーバがクリアテキストポート参照のみを返し、SSLポート参照をドロップするには、次のように入力します。

    referralIncludeFilter = { "ldap://" }

    または

    referralExcludeFilter = { "ldaps://" }

  • LDAPサーバがIPアドレスのセットから返し、それ以外のすべてのIPアドレス参照をドロップするには、次のように入力します。

    referralIncludeFilter = { 1.2.3.4, 2.3.4.5:389, 3.4.5.6:636, ldaps://4.5.6.7 }

    referralExcludeFilter = { "*" }

    メモ:ここで、referralExcludeFilterは必要ありません。いずれかの入力されたreferralIncludeFilterは他のすべてを除外することを意味します。

  • 次のように2つのフィルタがあるとします。

    referralIncludeFilter = { 1.2.3.4 }

    referralExcludeFilter = { 2.3.4.5 }

    IPアドレス3.4.5.6の参照は、referralExcludeFilterに一致しないとしても、referralIncludeフィルタとも一致しないので除外されます。

無効なフィルタ —次のフィルタはサポートされていません。

「.2.3.4」または「*.2.3.4」は、IPアドレスX.2.3.4に一致しません。

「2.3.4*」は2.3.41または2.3.42のようなIPアドレスに一致しません。

sever1.mydomain.comまたは*.mydomain.comのようなDNS名はサポートされていません。最初のポートから最後のポートまでを指定した参照IPアドレスの許可など、フィルタにポート範囲を追加することはできません。これらの属性にこれらのフィルタの値を追加する前に、検証チェックは行われません。ただし、無効なフィルタの場合、LDAPサーバはそれらのフィルタを無視し、ログをndsd.logファイルに記録します。

既知の問題 —LDAP rootDSE検索では、LDAP URL形式のレプリカサーバがある場合、altServersが返されます。これらのURLは、このメカニズムを使用してフィルタ処理されません。

ManageDsalTの非サポート

LDAP Services for eDirectoryでは、eDirectoryツリー内のeDirectoryサーバの分散関係は、ManageDsaIT制御以外の方法で管理されます。ManageDsalT制御によって、LDAPクライアントがeDirectoryサブオーディネートまたは相互参照の問い合わせや更新を実行することはできません。

サポートされていない機能

LDAP Services for eDirectoryは、サブオーディネートリファレンスをサポートしていません。信頼されたパーティションのサブオーディネートパーティションとして信頼されていないパーティションを作成したり、そのパーティションから参照を送信させると失敗する場合があります。これを行う場合、参照は操作のベースDNを解決するときのみ送信されます。SearchResultReferencesは送信されません。

信頼されていない領域のデータの分散更新はサポートされていません。ルートサーバで名前の変更があった場合、名前の変更を信頼されていない領域で同じデータを持ったeDirectoryサーバにコピーするような組み込みのメカニズムはありません。

14.8.3 フィルタ済みレプリカを検索する

フィルタはレプリカが持つデータ量を制限します。そのため、フィルタ済みのレプリカには、ディレクトリが保持する実データが完全には表示されません。次はレプリカに適用されたフィルタの例です。

  • レプリカに含まれるのはユーザオブジェクトだけです。

  • レプリカにはすべてのユーザオブジェクトが含まれますが、オブジェクトには電話番号と住所しか含まれません。

フィルタ済みレプリカのデータは不完全なため、LDAP検索の結果も制限されます。そのため、デフォルトでは、LDAP検索要求はフィルタ済みレプリカを調べません。

次のような場合は、フィルタ済みレプリカ検索を実行しても、レプリカフィルタから何も検索結果が返されないことがあります。

  • 検索フィルタに一致するオブジェクトがローカルのフィルタ済みレプリカサーバに存在しない場合、結果が完全なレプリカサーバから取得されるため、ローカルのレプリカフィルタの結果と一致しないことがあります。

  • 検索ベースがフィルタ済みレプリカサーバのローカルにない場合、検索フィルタに一致するオブジェクトが完全なレプリカサーバから取得され、これがローカルレプリカのフィルタの結果と一致しないことがあります。

ただし、フィルタ済みレプリカに必要なデータがあることがわかっている場合は、LDAPサーバがフィルタ済みレプリカを検索するように設定することができます。

  1. NetIQ iManagerで、[役割およびタスク]ボタン [役割およびタスク]ボタンをクリックします。

  2. LDAP] > [LDAPオプション]をクリックする。

  3. LDAPサーバの表示]をクリックし、LDAPサーバの名前をクリックします。

  4. 検索]をクリックします。

  5. 検索にフィルタ済みレプリカを含める]を選択し、[適用]をクリックします。

    [フィルタ済みレプリカを使用して検索]ラジオボタン