Compartilhar via


Sintaxe de filtro de pesquisa

Os filtros de pesquisa permitem definir critérios de pesquisa e fornecer pesquisas mais eficientes e eficazes.

O ADSI dá suporte aos filtros de pesquisa LDAP, conforme definido em RFC2254. Esses filtros de pesquisa são representados por cadeias de caracteres Unicode. A tabela a seguir lista alguns exemplos de filtros de pesquisa LDAP.

Filtro de pesquisa Descrição
"(objectClass=*)" Todos os objetos.
"(&(objectCategory=person)(objectClass=user)(!( cn=andy))" Todos os objetos de usuário, menos "andy".
"(sn=sm*)" Todos os objetos com um sobrenome que começa com "sm".
"(&(objectCategory=person)(objectClass=contact)(|( sn=Smith)(sn=Johnson)))" Todos os contatos com um sobrenome igual a "Smith" ou "Johnson".

 

Esses filtros de pesquisa usam um dos seguintes formatos.

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

ou

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

Os filtros de pesquisa ADSI são usados de duas maneiras. Eles fazem parte do dialeto LDAP para enviar consultas por meio do provedor OLE DB. Eles também são usados com a interface deIDirectorySearch.

Operadores

A tabela a seguir lista os operadores de filtro de pesquisa usados com frequência.

Operador lógico Descrição
= Igual a
~= Aproximadamente igual a
<= Lexicograficamente menor ou igual a
>= Lexicograficamente maior ou igual a
& E
| OU
! NÃO

 

Além dos operadores acima, o LDAP define dois OIDs (identificadores de objeto de regra) correspondentes que podem ser usados para executar comparações bit a bit de valores numéricos. As regras de correspondência têm a sintaxe a seguir.

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

"<attribute name>" é o lDAPDisplayName do atributo, "<rule OID>" é o OID para a regra correspondente, e "<valor>" é o valor a ser usado para comparação. Lembre-se de que os espaços não podem ser usados nesta cadeia de caracteres. "<valor>" deve ser um número decimal; não pode ser um número hexadecimal ou um nome constante, como ADS_GROUP_TYPE_SECURITY_ENABLED. Para obter mais informações sobre os atributos disponíveis do Active Directory, consulte Todos os Atributos.

A tabela a seguir lista os OIDs de regra correspondentes implementados pelo LDAP.

OID da regra de correspondência Identificador de cadeia de caracteres (de Ntldap.h) Descrição
1.2.840.113556.1.4.803 LDAP_MATCHING_RULE_BIT_AND Uma correspondência será encontrada somente se todos os bits do atributo corresponderem ao valor. Essa regra é equivalente a um operador de AND bit a bit.
1.2.840.113556.1.4.804 LDAP_MATCHING_RULE_BIT_OR Uma correspondência será encontrada se algum bit do atributo corresponder ao valor. Essa regra é equivalente a um operador or de bit a bit.
1.2.840.113556.1.4.1941 LDAP_MATCHING_RULE_IN_CHAIN Essa regra é limitada a filtros que se aplicam ao DN. Este é um operador de correspondência especial "estendido" que orienta a cadeia de ancestralidade em objetos até a raiz até encontrar uma correspondência.

 

A cadeia de caracteres de consulta de exemplo a seguir pesquisa objetos de grupo que têm o sinalizador ADS_GROUP_TYPE_SECURITY_ENABLED definido. Lembre-se de que o valor decimal de ADS_GROUP_TYPE_SECURITY_ENABLED (0x80000000 = 2147483648) é usado para o valor de comparação.

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

O LDAP_MATCHING_RULE_IN_CHAIN é uma OID de regra correspondente projetada para fornecer um método para pesquisar a ancestralidade de um objeto. Muitos aplicativos que usam o AD e o AD LDS geralmente funcionam com dados hierárquicos, que são ordenados por relações pai-filho. Anteriormente, os aplicativos realizavam a expansão transitiva do grupo para descobrir a associação de grupo, que usava muita largura de banda de rede; os aplicativos necessários para fazer várias viagens de ida e volta para descobrir se um objeto caiu "na cadeia" se um link for percorrido até o final.

Um exemplo dessa consulta foi projetado para verificar se um usuário "user1" é membro do grupo "group1". Você definiria a base para o (cn=user1, cn=users, dc=x) de DN do usuário e o escopo para basee usaria a consulta a seguir.

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

Da mesma forma, para localizar todos os grupos dos quais "user1" é membro, defina a base para o DN do contêiner de grupos; por exemplo, (OU=groupsOU, dc=x) e o escopo a ser subtreee use o filtro a seguir.

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

Observe que, ao usar LDAP_MATCHING_RULE_IN_CHAIN, o escopo não é limitado, pode ser base, one-levelou subtree. Algumas dessas consultas em subárvores podem ser mais intensivas em processadores, como a busca de links com um alto fan-out; ou seja, listando todos os grupos dos quais um usuário é membro. Pesquisas ineficientes registrarão as mensagens de log de eventos apropriadas, como em qualquer outro tipo de consulta.

Curingas

Você também pode adicionar curingas e condições a um filtro de pesquisa LDAP. Os exemplos a seguir mostram subcadeias de caracteres que podem ser usadas para pesquisar o diretório.

Obtenha todas as entradas:

(objectClass=*)

Obtenha entradas que contêm "bob" em algum lugar no nome comum:

(cn=*bob*)

Obtenha entradas com um nome comum maior ou igual a "bob":

(cn>='bob')

Obtenha todos os usuários com um atributo de email:

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

Obtenha todas as entradas de usuário com um atributo de email e um sobrenome igual a "smith":

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

Obtenha todas as entradas de usuário com um nome comum que começa com "andy", "steve" ou "margaret":

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

Obtenha todas as entradas sem um atributo de email:

(!(email=*))

A definição formal do filtro de pesquisa é a seguinte (de 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>

O token <attr> é uma cadeia de caracteres que representa um AttributeType. O token <valor> é uma cadeia de caracteres que representa um AttributeValue cujo formato é definido pelo serviço de diretório subjacente.

Se um valor <> deve conter o caractere asterisco (*), parêntese esquerdo (() ou parêntese direito ()), o caractere deverá ser precedido pelo caractere de escape de barra invertida (\).

Caracteres especiais

Se qualquer um dos caracteres especiais a seguir precisar aparecer no filtro de pesquisa como literais, eles deverão ser substituídos pela sequência de escape listada.

Caractere ASCII Substituto da sequência de escape
* \2a
( \28
) \29
\ \5c
NUL \00
/ \2f

 

Nota

Nos casos em que um Conjunto de Caracteres MultiByte está sendo usado, as sequências de escape listadas acima devem ser usadas se a pesquisa for executada pelo ADO com o dialeto SQL.

 

Além disso, os dados binários arbitrários podem ser representados usando a sintaxe da sequência de escape codificando cada byte de dados binários com a barra invertida (\) seguida por dois dígitos hexadecimal. Por exemplo, o valor de quatro bytes 0x00000004 é codificado como \00\00\00\04 em uma cadeia de caracteres de filtro.

dialeto LDAP

dialeto SQL

Pesquisa com a interface IDirectorySearch

pesquisa com objetos de dados ActiveX

pesquisa com OLE DB