Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 base
e 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 subtree
e 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-level
ou 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.
Tópicos relacionados
-
pesquisa com objetos de dados ActiveX
-
pesquisa com OLE DB