Active Directory Cookbook by

Discussão

Muitos atributos no Active Directory são compostos por bandeiras de bits. Uma bit flag é frequentemente usada para codificar propriedades sobre um objeto em um único atributo. Por exemplo, o atributo groupType emgroup objetos é um bit flag que é usado para determinar o escopo e tipo do grupo.

O atributo userAccountControl emuser e computer objetos é usado para descrever uma série inteira de propriedades, incluindo o estado das contas (i.e, habilitado ou desabilitado), bloqueio de conta, senha não requerida, autenticação de smartcard requerida, etc.

O searchFlags e systemFlagsatributos em attributeSchema objetos definem, entre outras coisas, se um atributo é construído, indexado e incluído como parte da Ambiguous Name Resolution (ANR).

Para pesquisar contra estes tipos de atributos, você precisa usar filtros bitwisesearch. Existem dois tipos de filtros de pesquisa bitwise que você pode usar, um que representa um OR lógico e outro que representa um lógicoAND. Isto é implementado dentro de um filtro de pesquisa como regra de correspondência. Uma regra de correspondência é simplesmente uma forma de informar o servidor LDAP (neste caso, um controlador de domínio) a tratar parte do filtro de forma diferente. Aqui está um exemplo de como a regra de correspondência se parece:

(userAccountControl:1.2.840.113556.1.4.803:=514)

O formato é(attributename:MatchingRuleOID:=value). Como mencionei, existem duas regras de correspondência bit a bit, que são definidas por OIDs. A regra lógica E de correspondência OID é1.2.840.113556.1.4.803 e a regra lógica OU de correspondência OID é1.2.840.113556.1.4.804. Estes OIDs instruem o servidor a executar um processamento especial no filtro. Um filtro OU lógico irá retornar o processamento se qualquer bit especificado por value, for armazenado em attributename. Alternativamente, o filtro lógico AND retornará o sucesso se todos os bits especificados porvalue, corresponderem ao valor deattributename. Talvez um exemplo ajude a esclarecer isto.

Para criar uma conta de usuário normal, você tem que definiruserAccountControl para 514. O número 514 foi calculado adicionando o flag de conta de usuário normal de 512 junto com o flag de conta desativada de 2 (512 + 2 = 514). Se você usar a seguinte regra de correspondência lógica OU contra o valor 514, como shownhere:

(useraccountcontrol:1.2.840.113556.1.4.804:=514)

então todas as contas de usuário normal (flag 512) OU contas desabilitadas (flag2) seriam retornadas. Isto incluiria contas de usuário habilitadas (do flag 512), contas de computador desabilitadas (do flag 2) e contas de usuário desabilitadas (do flag 2). No caso deuserAccountControl, o flag 2 pode ser aplicado tanto para contas de usuário quanto para contas de computador e, portanto, por que ambos seriam incluídos nas entradas retornadas.

Uma maneira de ver os benefícios das regras de correspondência bitwise é que elas permitem combinar um monte de comparações em um único filtro. De fato, pode ajudar pensar que o filtro OU anterior que acabei de mostrar também poderia ser escrito usando duas expressões:

(|(useraccountcontrol:1.2.840.113556.1.4.804:=2) (useraccountcontrol:1.2.840.113556.1.4.804:=512))

Apenas como antes, isto irá combinar userAccountControlatributos que contenham os 2 ou 512 flags.

Para o E lógico, princípios similares se aplicam. Ao invés de qualquer um dos bits na bandeira ser uma possível correspondência, TODOS os bits na bandeira devem corresponder para que ela retorne um sucesso. Se mudássemos o nosso exemplouserAccountControl para usar AND lógico, ele seria parecido com isto:

(useraccountcontrol:1.2.840.113556.1.4.803:=514)

Neste caso, apenas contas de usuários normais que também estão desabilitadas seriam devolvidas. O mesmo filtro poderia ser reescrito usando o operador& em vez de | como no seguinte:

(&(useraccountcontrol:1.2.840.113556.1.4.803:=2) (useraccountcontrol:1.2.840.113556.1.4.803:=512))

Uma subtileza importante a notar é que quando você está comparando apenas como um valor único de bit-flag, a regra lógica OU e lógica E correspondente retornaria o mesmo resultado. Assim, se quiséssemos encontrar qualquer conta de usuário normal, poderíamos pesquisar na bandeira de bit único de 512 usando um dos seguintes:

(useraccountcontrol:1.2.840.113556.1.4.803:=512)(useraccountcontrol:1.2.840.113556.1.4.804:=512)

Deixe uma resposta

O seu endereço de email não será publicado.