33

I have searched on this topic, but all I find are filters that return entries where a certain attribute is not present, like:

(!(manager=*))

However, I want to find entries where the attribute is present, but has a null value (i.e. an empty/blank string). Can I do this using an LDAP filter, and if so, how?

EDIT:

Just to confirm, the above filter finds entries without the attribute, but not where the attribute is empty (null string).

Is this dependent on the LDAP implementation or what?

4

6 に答える 6

23

LDAP から、空の文字列を特定するクエリ メソッドはありません。

ベスト プラクティスは、LDAP の空または null 値はまったく値がないため、LDAP へのデータ入力をスクラブすることです。

これを判断するには、値 (manager=*) を使用してすべてを照会し、コードを使用して「スペース」または null 値であったものを判断する必要があります。

Terry が言ったように、DN 構文の属性に空または null の値を格納するのは間違っています。

一部の LDAP サーバー実装では、DN エントリが存在しない場所に DN を入力することを許可しません。

おそらく、DN が一貫している場合は、次のようなものを使用できます。

(&(!(manager=cn*))(manager=*))

これは、manager の値があり、それが「cn」で始まっていない場合、manager の任意の値を返す必要があります。

ただし、一部の LDAP 実装では、DN 構文属性の部分文字列検索が許可されません。

-ジム

于 2013-01-22T11:39:56.443 に答える
9

この記事http://technet.microsoft.com/en-us/library/ee198810.aspxが解決策につながりました。唯一の変更点は、感嘆符の配置です。

(!manager=*)

思い通りに動いているようです。

于 2014-12-12T13:29:03.730 に答える
3

managedBy 値セット (空ではない) を持つすべてのグループを取得するためにクエリを実行する必要があり、これによりいくつかの良い結果が得られました。

(!(!managedBy=*))
于 2013-12-12T17:00:52.317 に答える
3

LDAP では、意味的にこれらのケースに違いはありません。

于 2013-01-21T22:41:09.763 に答える
2

属性のスキーマ定義によって、属性に値が必要かどうかが決まります。manager与えられた例の属性がRFC4524で OIDで定義された属性である場合、0.9.2342.19200300.100.1.10その属性には DN 構文があります。DN 構文は相対識別名のシーケンスであり、空であってはなりませんmanager例に示されているフィルターを使用して、LDAP ディレクトリ サーバーは、検索結果で LDAP クライアントへの属性を持たないエントリのみを返します。

于 2013-01-22T11:24:18.823 に答える