2

LDAPクエリのフィルターを作成するのに問題があります。

PersonとServiceの2つのオブジェクトクラスがあります。データベースは多数の個人で構成されており、各個人は子として0個以上のサービスを持っています。各人には識別子、personNumber属性があります。個人番号を指定して、複数の人とそのすべてのサービスを選択したいと思います。1つのクエリでこれを行うことは可能ですか?

たとえば、次のオブジェクトのセットがある場合:

                personNumber=1,ou=root,o=org
serviceNumber=1,personNumber=1,ou=root,o=org
serviceNumber=2,personNumber=1,ou=root,o=org
                personNumber=2,ou=root,o=org
serviceNumber=3,personNumber=2,ou=root,o=org
                personNumber=3,ou=root,o=org
serviceNumber=4,personNumber=3,ou=root,o=org

、人物番号1と2が与えられた場合、これらのオブジェクトを取得することは可能ですか。

                personNumber=1,ou=root,o=org
serviceNumber=1,personNumber=1,ou=root,o=org
serviceNumber=2,personNumber=1,ou=root,o=org
                personNumber=2,ou=root,o=org
serviceNumber=3,personNumber=2,ou=root,o=org

しかし、これらではありません:

                personNumber=3,ou=root,o=org
serviceNumber=4,personNumber=3,ou=root,o=org

1つのクエリのみを使用しますか?これは一例です。ロードする識別子を3つ以上持つことができます。それらは先験的には知られていません。

また、大きなフィルターIN (..)を生成する以外に、SQLの句のように、属性値を値のコレクションに含めるように指定する方法はありますか?(|(a=..)(a=..)(a=..)..)

4

2 に答える 2

2

答えは「いいえ」です。RFChttps://www.rfc-editor.org/rfc/rfc2254によると、そのようなフィルターはありません。INリストが非常に大きく、LDAPに多数のユーザーがいる場合は、簡単なものを作成する必要があります(objectClass = Person)フィルターを使用してすべての結果を取得し、再試行後に結果をフィルター処理するページクエリ。コードがJavaで記述されている場合は、 無制限のLDAPSDKをチェックアウトできます

于 2012-08-17T08:45:03.137 に答える
1

人がサービスを保持する複数値の属性を持っていない場合、これを1つのldapsearchで返す方法はありません。少なくとも2段階のロケットが必要です。最初に人を選択し、人ごとに子ノードをチェックします。

AFAIKLDAPフィルターにはIN演算子はありません。RFCはそれについて明確です。したがって、退屈な(|(a = s1)(a = s2)(a = s3)...)構造で立ち往生しています。

于 2012-08-17T09:06:02.757 に答える