Sdílet prostřednictvím


Syntaxe filtru hledání

Vyhledávací filtry umožňují definovat kritéria hledání a poskytovat efektivnější a efektivnější hledání.

Rozhraní ADSI podporuje filtry vyhledávání LDAP definované v RFC2254. Tyto vyhledávací filtry jsou reprezentovány řetězci Unicode. Následující tabulka uvádí několik příkladů vyhledávacích filtrů LDAP.

Filtr hledání Popis
"(objectClass=*)" Všechny objekty.
"(&(objectCategory=person)(objectClass=user)(!( cn=andy))) " Všechny uživatelské objekty, ale "andy".
"(sn=sm*)" Všechny objekty s příjmením, které začínají "sm".
"(&(objectCategory=person)(objectClass=contact)(|( sn=Smith)(sn=Johnson)))" Všechny kontakty s příjmením, které se rovná "Smith" nebo "Johnson".

 

Tyto vyhledávací filtry používají jeden z následujících formátů.

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

nebo

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

Filtry vyhledávání ADSI se používají dvěma způsoby. Tvoří součást dialektu LDAP pro odesílání dotazů prostřednictvím zprostředkovatele OLE DB. Používají se také s rozhraním IDirectorySearch.

Operátoři

Následující tabulka uvádí často používané operátory filtru vyhledávání.

Logický operátor Popis
= Rovná se
~= Přibližně rovno
<= Lexicicky menší než nebo rovno
>= Lexicicky větší než nebo rovno
& A
| NEBO
! NE

 

Kromě výše uvedených operátorů ldap definuje dva odpovídající identifikátory objektu pravidla (OID), které lze použít k provedení bitové porovnání číselných hodnot. Odpovídající pravidla mají následující syntaxi.

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

"<název atributu>" je lDAPDisplayName atributu, "<OID pravidla>" je OID pro odpovídající pravidlo a "<hodnota>" je hodnota, která se má použít pro porovnání. Mějte na paměti, že v tomto řetězci nelze použít mezery. " hodnota<>" musí být desetinné číslo; nemůže to být šestnáctkové číslo nebo konstantní název, například ADS_GROUP_TYPE_SECURITY_ENABLED. Další informace o dostupných atributech služby Active Directory naleznete v tématu Všechny atributy.

Následující tabulka uvádí odpovídající identifikátory OID pravidel implementované protokolem LDAP.

Odpovídající identifikátor pravidla Identifikátor řetězce (z Ntldap.h) Popis
1.2.840.113556.1.4.803 LDAP_MATCHING_RULE_BIT_AND Shoda se najde pouze v případě, že všechny bity z atributu odpovídají hodnotě. Toto pravidlo je ekvivalentní bitovému operátoru AND.
1.2.840.113556.1.4.804 LDAP_MATCHING_RULE_BIT_OR Shoda se najde, pokud některé bity z atributu odpovídají hodnotě. Toto pravidlo je ekvivalentní bitovému operátoru OR.
1.2.840.113556.1.4.1941 LDAP_MATCHING_RULE_IN_CHAIN Toto pravidlo je omezeno na filtry, které platí pro DN. Jedná se o speciální operátor rozšířené shody, který provede řetězec ancestry v objektech až do kořenového adresáře, dokud nenajde shodu.

 

Následující příklad řetězce dotazu vyhledá objekty skupiny, které mají ADS_GROUP_TYPE_SECURITY_ENABLED příznak nastaven. Mějte na paměti, že pro porovnávací hodnotu se používá desetinná hodnota ADS_GROUP_TYPE_SECURITY_ENABLED (0x80000000 = 2147483648).

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

LDAP_MATCHING_RULE_IN_CHAIN je odpovídající identifikátor OID pravidla, který je navržen tak, aby poskytoval metodu pro vyhledání ancestry objektu. Mnoho aplikací využívajících službu AD a AD LDS obvykle pracuje s hierarchickými daty, která jsou seřazená podle vztahů nadřazenosti a podřízenosti. Dříve aplikace prováděly přechodné rozšíření skupiny, aby zjistily členství ve skupině, které využívaly příliš velkou šířku pásma sítě; aplikace potřebné k tomu, aby se zjistilo, jestli objekt spadl "do řetězu", pokud je odkaz prošel až na konec.

Příkladem takového dotazu je jeden z nich, který slouží ke kontrole, jestli je uživatel "user1" členem skupiny group "group1". Základ byste nastavili na (cn=user1, cn=users, dc=x) dn uživatele a obor na basea použili následující dotaz.

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

Podobně pokud chcete najít všechny skupiny, ve které je uživatel1 členem, nastavte základ na DN kontejneru skupin; například (OU=groupsOU, dc=x) a rozsah pro subtreea použijte následující filtr.

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

Mějte na paměti, že při použití LDAP_MATCHING_RULE_IN_CHAINnení rozsah omezen – může to být base, one-levelnebo subtree. Některé takové dotazy na podstromy můžou být náročnější na procesor, například pronásledování odkazů s vysokým ventilátorem; to znamená, že se zobrazí seznam všech skupin, které je uživatel členem. Neefektivní vyhledávání bude protokolovat odpovídající zprávy protokolu událostí, stejně jako u jakéhokoli jiného typu dotazu.

Zástupné kóty

Do filtru vyhledávání LDAP můžete také přidat zástupné cardy a podmínky. Následující příklady ukazují podřetěžce, které lze použít k vyhledávání v adresáři.

Získání všech položek:

(objectClass=*)

Získejte položky obsahující "bob" někde ve společném názvu:

(cn=*bob*)

Získejte položky se společným názvem, který je větší nebo roven "bob":

(cn>='bob')

Získejte všechny uživatele s atributem e-mailu:

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

Získejte všechny položky uživatele s atributem e-mailu a příjmením, které se rovná "smith":

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

Získejte všechny uživatelské položky se společným názvem, který začíná na "andy", "steve" nebo "margaret":

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

Získejte všechny položky bez atributu e-mailu:

(!(email=*))

Formální definice vyhledávacího filtru je následující (z 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>

Token <attr> je řetězec, který představuje AttributeType. Hodnota tokenu <> je řetězec, který představuje AtributValue, jehož formát je definován podkladovou adresářovou službou.

Pokud <hodnota> musí obsahovat znak hvězdičky (*), levá závorka (() nebo pravá závorka ()), musí znak předcházet řídicímu znaku zpětného lomítka (\).

Speciální znaky

Pokud se některý z následujících speciálních znaků musí ve vyhledávacím filtru objevit jako literály, musí být nahrazeny uvedenou řídicí sekvencí.

Znak ASCII Náhražka řídicí sekvence
* \2a
( \28
) \29
\ \5c
NUL \00
/ \2f

 

Poznámka

V případech, kdy se používá vícebajtová znaková sada, musí být řídicí sekvence uvedené výše použity, pokud je hledání provedeno službou ADO s dialektem SQL.

 

Kromě toho mohou být libovolná binární data reprezentována pomocí syntaxe řídicí sekvence kódováním každého bajtu binárních dat pomocí zpětného lomítka (\) následovaných dvěma šestnáctkovými číslicemi. Například čtyřbajtů hodnota 0x00000004 je kódována jako \00\00\00\00\04 v řetězci filtru.

dialektu LDAP

dialektu SQL

Vyhledávání pomocí rozhraní IDirectorySearch

vyhledávání pomocí datových objektů ActiveX

Vyhledávání pomocí OLE DB