Suchfiltersyntax

MitHilfe von Suchfiltern können Sie Suchkriterien definieren und effizientere und effektivere Suchvorgänge bereitstellen.

ADSI unterstützt die IN RFC2254 definierten LDAP-Suchfilter. Diese Suchfilter werden durch Unicode-Zeichenfolgen dargestellt. In der folgenden Tabelle sind einige Beispiele für LDAP-Suchfilter aufgeführt.

Suchfilter BESCHREIBUNG
"(objectClass= * )" Alle -Objekte.
"(&(objectCategory=person)(objectClass=user)(!( cn=andy)))) Alle Benutzerobjekte, aber "andy".
"(sn=sm * )" Alle Objekte mit einem Nachnamen, der mit "sm" beginnt.
"(&(objectCategory=person)(objectClass=contact)( | (sn=Smith)(sn=Johnson)))" Alle Kontakte mit einem Nachnamen, der "Smith" oder "Smith" entspricht.

Diese Suchfilter verwenden eines der folgenden Formate.

<filter>=(<attribute><operator><value>)

oder

(<operator><filter1><filter2>)

Die ADSI-Suchfilter werden auf zwei Arten verwendet. Sie bilden einen Teil des LDAP-Dialekts zum Übermitteln von Abfragen über den OLE DB Anbieters. Sie werden auch mit der IDirectorySearch-Schnittstelle verwendet.

Operatoren

In der folgenden Tabelle sind häufig verwendete Suchfilteroperatoren aufgeführt.

Logischer Operator BESCHREIBUNG
= Gleich
~= Ungefähr gleich
<= Lexikografischer Wert kleiner oder gleich
>= Lexikografischer Wert größer oder gleich
& AND
| oder
! NICHT

Zusätzlich zu den oben genannten Operatoren definiert LDAP zwei übereinstimmende Regelobjektbezeichner (OIDs), die verwendet werden können, um bitweise Vergleiche von numerischen Werten durchzuführen. Abgleichsregeln haben die folgende Syntax.

<attribute name>:<matching rule OID>:=<value>

" Attributname " ist < > der lDAPDisplayName des Attributs, " rule OID " ist die OID für die Abgleichsregel, und " value " ist der Wert, der für den Vergleich < verwendet werden > < > soll. Beachten Sie, dass in dieser Zeichenfolge keine Leerzeichen verwendet werden können. " value " muss eine Dezimalzahl sein. Es darf keine < Hexadezimalzahl oder ein konstanter Name wie > ADS GROUP TYPE SECURITY ENABLED _ _ _ _ sein. Weitere Informationen zu den verfügbaren Active Directory-Attributen finden Sie unter Alle Attribute.

In der folgenden Tabelle sind die übereinstimmenden Regel-OIDs aufgeführt, die von LDAP implementiert werden.

Abgleichsregel-OID Zeichenfolgenbezeichner (aus Ntldap.h) BESCHREIBUNG
1.2.840.113556.1.4.803 _LDAP-ABGLEICHSREGEL _ _ BIT _ UND Eine Übereinstimmung wird nur gefunden, wenn alle Bits aus dem Attribut mit dem Wert übereinstimmen. Diese Regel entspricht einem bitweisem AND-Operator.
1.2.840.113556.1.4.804 _LDAP-ABGLEICHSREGEL _ _ BIT _ ODER Eine Übereinstimmung wird gefunden, wenn Bits aus dem Attribut mit dem Wert übereinstimmen. Diese Regel entspricht einem bitweisem OR-Operator.
1.2.840.113556.1.4.1941 _ _ LDAP-ABGLEICHSREGEL _ IN DER _ KETTE Diese Regel ist auf Filter beschränkt, die für den DN gelten. Dies ist ein spezieller "erweiterter" Übereinstimmungsoperator, der die Kette der Herkunft in Objekten bis zum Stamm durchfingt, bis eine Übereinstimmung gefunden wird.

Die folgende Beispielabfragezeichenfolge sucht nach Gruppenobjekten, für die das FLAG ADS GROUP TYPE SECURITY _ _ _ _ ENABLED festgelegt ist. Beachten Sie, dass der Dezimalwert von ADS GROUP TYPE SECURITY _ _ _ _ ENABLED (0x80000000 = 2147483648) für den Vergleichswert verwendet wird.

(&(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=2147483648))

Die _ LDAP-ABGLEICHSREGEL _ _ IN _ CHAIN ist eine übereinstimmende Regel-OID, die eine Methode zum Suchen der Herkunft eines Objekts bereitstellen soll. Viele Anwendungen, die AD und AD LDS, arbeiten in der Regel mit hierarchischen Daten, die nach Über-/Unterordnungsbeziehungen geordnet sind. Bisher haben Anwendungen eine transitive Gruppenerweiterung durchgeführt, um die Gruppenmitgliedschaft zu finden, die zu viel Netzwerkbandbreite genutzt hat. -Anwendungen mussten mehrere Roundtrips erstellen, um herauszufinden, ob ein Objekt "in der Kette" liegt, wenn ein Link bis zum Ende durchlaufen wird.

Ein Beispiel für eine solche Abfrage ist eine Abfrage, die überprüft, ob ein Benutzer "user1" Mitglied der Gruppe "group1" ist. Sie würden die Basis auf den Benutzer-DN und den (cn=user1, cn=users, dc=x) Bereich auf festlegen und die folgende Abfrage base verwenden.

(memberof:1.2.840.113556.1.4.1941:=cn=Group1,OU=groupsOU,DC=x)

Um alle Gruppen zu finden, in denen "user1" Mitglied ist, legen Sie die Basis auf den Gruppencontainer-DN fest. z. (OU=groupsOU, dc=x) B. und der Bereich auf subtree , und verwenden Sie den folgenden Filter.

(member:1.2.840.113556.1.4.1941:=cn=user1,cn=users,DC=x)

Beachten Sie, dass der Bereich bei Verwendung der _ LDAP-ABGLEICHSREGEL _ _ IN _ CHAIN nicht eingeschränkt ist. Er kann base , oder one-level subtree sein. Einige solche Abfragen für Teilstruktur sind möglicherweise prozessorintensiver, z. B. das Verdreuen von Links mit einem hohen Auffächern. Das heißt, sie listet alle Gruppen auf, denen ein Benutzer mitglied ist. Ineffiziente Suchvorgänge protokollieren die entsprechenden Ereignisprotokollmeldungen wie bei jedem anderen Abfragetyp.

Platzhalter

Sie können einem LDAP-Suchfilter auch Platzhalter und Bedingungen hinzufügen. Die folgenden Beispiele zeigen Teilzeichenfolgen, die zum Durchsuchen des Verzeichnisses verwendet werden können.

Alle Einträge erhalten:

(objectClass=*)

Get entries containing "bob" somewhere in the common name(Einträge mit "bob" im allgemeinen Namen):

(cn=*bob*)

Hier erhalten Sie Einträge mit einem allgemeinen Namen, der größer oder gleich "bob" ist:

(cn>='bob')

Alle Benutzer mit einem E-Mail-Attribut erhalten:

(&(objectClass=user)(email=*))

Erhalten Sie alle Benutzereinträge mit einem E-Mail-Attribut und einem Nachnamen, der "smith" entspricht:

(&(sn=smith)(objectClass=user)(email=*))

Erhalten Sie alle Benutzereinträge mit einem allgemeinen Namen, der mit "andy", "steve" oder "beschriftet" beginnt:

(&(objectClass=user)(| (cn=andy*)(cn=steve*)(cn=margaret*)))

Alle Einträge ohne E-Mail-Attribut erhalten:

(!(email=*))

Die formale Definition des Suchfilters lautet wie folgt (aus RFC 2254):

<filter> ::= '(' <filtercomp> ')'
<filtercomp> ::= <and> | <or> | <not> | <item>
<and> ::= '&' <filterlist>
<or> ::= '|' <filterlist>
<not> ::= '!' <filter>
<filterlist> ::= <filter> | <filter> <filterlist>
<item>::= <simple> | <present> | <substring>
<simple> ::= <attr> <filtertype> <value><filtertype> ::= <equal> | <approx> | <ge> | <le>
<equal> ::= '='
<approx> ::= '~='
<ge> ::= '>='
<le> ::= '<='
<present> ::= <attr> '=*'
<substring> ::= <attr> '=' <initial> <any> <final>
<initial> ::= NULL | <value><any> ::= '*' <starval>
<starval> ::= NULL | <value>'*' <starval>
<final> ::= NULL | <value>

Das Token < attr > ist eine Zeichenfolge, die einen AttributeType darstellt. Der < Tokenwert > ist eine Zeichenfolge, die einen AttributeValue darstellt, dessen Format vom zugrunde liegenden Verzeichnisdienst definiert wird.

Wenn ein Wert das Sternchen ( ), die linke Klammer (() oder die rechte Klammer ()) enthalten muss, sollte dem Zeichen das Escapezeichen mit dem zurücken Schrägstrich ( ) vorangehenden < > * \ werden.

Sonderzeichen

Wenn eines der folgenden Sonderzeichen im Suchfilter als Literale angezeigt werden muss, müssen sie durch die aufgelistete Escapesequenz ersetzt werden.

ASCII-Zeichen Ersatz für Escapesequenz
* \2a
( \28
) \29
\ \5c
NUL \00
/ \2f

Hinweis

In Fällen, in denen ein MultiByte-Zeichensatz verwendet wird, müssen die oben aufgeführten Escapesequenzen verwendet werden, wenn die Suche von ADO mit dem SQL wird.

Darüber hinaus können beliebige Binärdaten mithilfe der Escapesequenzsyntax dargestellt werden, indem jedes Byte binärer Daten mit dem zurücken Schrägstrich ( ) gefolgt von zwei \ Hexadezimalziffern codiert wird. Beispielsweise wird der Vier-Byte-0x00000004 in einer Filterzeichenfolge als \ 00 \ 00 \ 00 \ 04 codiert.

LDAP-Dialekt

SQL Dialekt

Suchen mit der IDirectorySearch-Schnittstelle

Suchen mit ActiveX-Datenobjekten

Suchen mit OLE DB