Sintaxe do filtro de pesquisa
Os filtros de pesquisa permitem-lhe definir critérios de pesquisa e fornecer pesquisas mais eficientes e eficazes.
O ADSI suporta os filtros de pesquisa LDAP conforme definido no 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 do usuário, exceto "andy". |
"(sn=sm*)" | Todos os objetos com um sobrenome que começa com "sm". |
"(&(objectCategory=person)(objectClass=contato)(|( sn=Smith(sn=Johnson)))" | Todos os contatos com um sobrenome igual a "Smith" ou "Johnson". |
Estes filtros de pesquisa utilizam um dos seguintes formatos.
<filter>=(<attribute><operator><value>)
quer
<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 o IDirectorySearch interface.
Operadores
A tabela a seguir lista os operadores de filtro de pesquisa usados com freqüência.
Operador lógico | Descrição |
---|---|
= | Igual a |
~= | Aproximadamente igual a |
<= | Lexicograficamente menor ou igual a |
>= | Lexicograficamente maior ou igual a |
& | E AINDA |
| | OU |
! | NÃO |
Além dos operadores acima, o LDAP define dois identificadores de objeto de regra (OIDs) correspondentes que podem ser usados para executar comparações bit a bit de valores numéricos. As regras de correspondência têm a seguinte sintaxe.
<attribute name>:<matching rule OID>:=<value>
"<nome do atributo>" é o lDAPDisplayName do atributo, "<regra 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 nessa 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 Ative Directory, consulte Todos os atributos.
A tabela a seguir lista os OIDs de regra correspondente implementados pelo LDAP.
Regra de correspondência OID | 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 só será encontrada se todos os bits do atributo corresponderem ao valor. Esta regra é equivalente a um operador bit a bit E. |
1.2.840.113556.1.4.804 | LDAP_MATCHING_RULE_BIT_OR | Uma correspondência é encontrada se algum bit do atributo corresponder ao valor. Esta regra é equivalente a um operador bit a bit OU. |
1.2.840.113556.1.4.1941 | LDAP_MATCHING_RULE_IN_CHAIN | Esta regra é limitada aos filtros que se aplicam ao DN. Este é um operador de correspondência "estendido" especial que percorre a cadeia de ancestralidade em objetos até a raiz até encontrar uma correspondência. |
O exemplo de seqüência de caracteres de consulta a seguir procura objetos de grupo que tenham 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 regra de correspondência OID que é projetada para fornecer um método para procurar a ancestralidade de um objeto. Muitos aplicativos que usam AD e AD LDS geralmente trabalham com dados hierárquicos, que são ordenados por relações pai-filho. Anteriormente, os aplicativos realizavam expansão transitiva de grupo para descobrir a associação ao grupo, que usava muita largura de banda de rede; Os aplicativos precisavam fazer várias viagens de ida e volta para descobrir se um objeto caiu "na cadeia" se um link for atravessado até o fim.
Um exemplo de tal consulta é uma projetada para verificar se um usuário "user1" é um membro do grupo "group1". Você definiria a base para o (cn=user1, cn=users, dc=x)
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 encontrar 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 do processador, como a busca de links com uma alta ventilação; ou seja, listar todos os grupos dos quais um usuário é membro. Pesquisas ineficientes registrarão 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 substrings que podem ser usadas para pesquisar o diretório.
Obter todas as entradas:
(objectClass=*)
Obter entradas contendo "bob" em algum lugar no nome comum:
(cn=*bob*)
Obter entradas com um nome comum maior ou igual a "bob":
(cn>='bob')
Obtenha todos os usuários com um atributo de e-mail:
(&(objectClass=user)(email=*))
Obtenha todas as entradas de usuário com um atributo de e-mail 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 e-mail:
(!(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 valor <token> é 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 deve ser precedido pelo caractere de escape de barra invertida (\).
Caracteres especiais
Se algum dos seguintes caracteres especiais tiver de aparecer no filtro de pesquisa como literais, deve ser substituído pela sequência de escape listada.
Caráter ASCII | Substituto da sequência de fuga |
---|---|
* | \2-A |
( | \28 |
) | \29 |
\ | \5C |
NUL | \00 |
/ | \2f |
Observação
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 realizada pelo ADO com o dialeto SQL.
Além disso, dados binários arbitrários podem ser representados usando a sintaxe de sequência de escape codificando cada byte de dados binários com a barra invertida (\) seguida por dois dígitos hexadecimais. 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 OLE DB