Delen via


Zoekfiltersyntaxis

Met zoekfilters kunt u zoekcriteria definiëren en efficiëntere en effectievere zoekopdrachten bieden.

ADSI ondersteunt de LDAP-zoekfilters zoals gedefinieerd in RFC2254. Deze zoekfilters worden vertegenwoordigd door Unicode-tekenreeksen. De volgende tabel bevat enkele voorbeelden van LDAP-zoekfilters.

Zoekfilter Beschrijving
"(objectClass=*)" Alle objecten.
"(&(objectCategory=person)(objectClass=user)(!( cn=andy))" Alle gebruikersobjecten, maar 'andy'.
"(sn=sm*)" Alle objecten met een achternaam die begint met "sm".
"(&(objectCategory=person)(objectClass=contact)(|( sn=Smith)(sn=Johnson))" Alle contacten met een achternaam gelijk aan "Smith" of "Johnson".

 

Deze zoekfilters gebruiken een van de volgende indelingen.

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

of

<filter>=(<operator><filter1><filter2>)

De ADSI-zoekfilters worden op twee manieren gebruikt. Ze vormen een onderdeel van het LDAP-dialect voor het verzenden van query's via de OLE DB-provider. Ze worden ook gebruikt met de interface IDirectorySearch.

Exploitanten

De volgende tabel bevat veelgebruikte zoekfilteroperators.

Logische operator Beschrijving
= Gelijk aan
~= Ongeveer gelijk aan
<= Lexicografisch kleiner dan of gelijk aan
>= Lexicografisch groter dan of gelijk aan
& EN
| OF
! NIET

 

Naast de bovenstaande operators definieert LDAP twee overeenkomende regelobject-id's (OID's) die kunnen worden gebruikt om bitwise vergelijkingen van numerieke waarden uit te voeren. Overeenkomende regels hebben de volgende syntaxis.

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

"<kenmerknaam>" is de lDAPDisplayName van het kenmerk, "<regel OID>" is de OID voor de overeenkomende regel en "<waarde>" is de waarde die moet worden gebruikt voor vergelijking. Houd er rekening mee dat spaties niet kunnen worden gebruikt in deze tekenreeks. "<waarde>" moet een decimaal getal zijn; het mag geen hexadecimaal getal of een constante naam zoals ADS_GROUP_TYPE_SECURITY_ENABLEDzijn. Zie Alle kenmerkenvoor meer informatie over de beschikbare Active Directory-kenmerken.

De volgende tabel bevat de overeenkomende regel-OID's die zijn geïmplementeerd door LDAP.

Overeenkomende regel-OID Tekenreeks-id (van Ntldap.h) Beschrijving
1.2.840.113556.1.4.803 LDAP_MATCHING_RULE_BIT_AND Er wordt alleen een overeenkomst gevonden als alle bits van het kenmerk overeenkomen met de waarde. Deze regel is gelijk aan een bitsgewijze operator AND.
1.2.840.113556.1.4.804 LDAP_MATCHING_RULE_BIT_OR Er wordt een overeenkomst gevonden als bits van het kenmerk overeenkomen met de waarde. Deze regel is gelijk aan een bitsgewijze operator OR.
1.2.840.113556.1.4.1941 LDAP_MATCHING_RULE_IN_CHAIN Deze regel is beperkt tot filters die van toepassing zijn op de DN. Dit is een speciale "extended"-matchoperator die de keten vancestry in objecten helemaal naar de hoofdmap leidt totdat er een overeenkomst wordt gevonden.

 

In de volgende voorbeeldqueryreeks wordt gezocht naar groepsobjecten waarvoor de vlag ADS_GROUP_TYPE_SECURITY_ENABLED is ingesteld. Houd er rekening mee dat de decimale waarde van ADS_GROUP_TYPE_SECURITY_ENABLED (0x80000000 = 2147483648) wordt gebruikt voor de vergelijkingswaarde.

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

De LDAP_MATCHING_RULE_IN_CHAIN is een overeenkomende regel-OID die is ontworpen om een methode te bieden voor het opzoeken van de afkomst van een object. Veel toepassingen die gebruikmaken van AD en AD LDS werken meestal met hiërarchische gegevens, die worden gerangschikt op bovenliggende en onderliggende relaties. Eerder hebben toepassingen transitieve groepsuitbreiding uitgevoerd om te achterhalen welk groepslidmaatschap, die te veel netwerkbandbreedte gebruikte; toepassingen die nodig zijn om meerdere roundtrips te maken om erachter te komen of een object 'in de keten' is gevallen als er een koppeling naar het einde wordt doorkruist.

Een voorbeeld van een dergelijke query is een query die is ontworpen om te controleren of een gebruiker 'gebruiker1' lid is van groep 'group1'. U stelt de basis in op de DN-(cn=user1, cn=users, dc=x) van de gebruiker en het bereik op baseen gebruikt de volgende query.

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

Als u alle groepen wilt vinden waarvan "user1" lid is, stelt u de basis in op de DN van de groepscontainer; bijvoorbeeld (OU=groupsOU, dc=x) en het bereik voor subtreeen gebruik het volgende filter.

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

Houd er rekening mee dat wanneer u LDAP_MATCHING_RULE_IN_CHAINgebruikt, het bereik niet beperkt is. Dit kan base, one-levelof subtreezijn. Sommige dergelijke query's op substructuren kunnen processorintensief zijn, zoals het achterhalen van koppelingen met een hoge fan-out; dat wil gezegd, waarbij alle groepen worden vermeld waarvan een gebruiker lid is. Inefficiënte zoekopdrachten registreren de juiste gebeurtenislogboekberichten, net als bij elk ander type query.

Jokertekens

U kunt ook jokertekens en voorwaarden toevoegen aan een LDAP-zoekfilter. In de volgende voorbeelden ziet u subtekenreeksen die kunnen worden gebruikt om in de map te zoeken.

Alle vermeldingen ophalen:

(objectClass=*)

Vermeldingen ophalen die 'bob' ergens in de algemene naam bevatten:

(cn=*bob*)

Vermeldingen ophalen met een algemene naam die groter is dan of gelijk is aan 'bob':

(cn>='bob')

Alle gebruikers ophalen met een e-mailkenmerk:

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

Haal alle gebruikersvermeldingen op met een e-mailkenmerk en een achternaam die gelijk is aan 'smith':

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

Alle gebruikersvermeldingen ophalen met een algemene naam die begint met 'andy', 'steve' of 'margaret':

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

Alle vermeldingen ophalen zonder een e-mailkenmerk:

(!(email=*))

De formele definitie van het zoekfilter is als volgt (van 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>

Het token <attr-> is een tekenreeks die een AttributeType vertegenwoordigt. Het token <waarde> is een tekenreeks die een AttributeValue vertegenwoordigt waarvan de indeling is gedefinieerd door de onderliggende adreslijstservice.

Als een <-waarde> het sterretje (*), haakje links (() of haakje rechts ()) moet bevatten, moet het teken worden voorafgegaan door het escapeteken voor de backslash (\).

Speciale tekens

Als een van de volgende speciale tekens in het zoekfilter als letterlijke tekens moet worden weergegeven, moeten deze worden vervangen door de vermelde escapereeks.

ASCII-teken Escape-reeks vervangen
* \2a
( \28
) \29
\ \5c
NUL \00
/ \2f

 

Notitie

In gevallen waarin een MultiByte Character Set wordt gebruikt, moeten de bovenstaande escapereeksen worden gebruikt als de zoekopdracht wordt uitgevoerd door ADO met het SQL-dialect.

 

Daarnaast kunnen willekeurige binaire gegevens worden vertegenwoordigd door de syntaxis van de escape-reeks te gebruiken door elke byte van binaire gegevens te coderen met de backslash (\), gevolgd door twee hexadecimale cijfers. De waarde van vier bytes 0x00000004 wordt bijvoorbeeld gecodeerd als \00\00\00\04 in een filtertekenreeks.

LDAP-dialect

SQL-dialect

Zoeken met de IDirectorySearch-interface

zoeken met ActiveX-gegevensobjecten

zoeken met OLE DB-