Active Directory Cookbook by

Discussion

De nombreux attributs dans Active Directory sont composés de bitflags. Un bitflag est souvent utilisé pour coder les propriétés d’un objet dans un seul attribut. Par exemple, l’attribut groupType sur les objetsgroup est un drapeau binaire qui est utilisé pour déterminer la portée et le type du groupe.

L’attribut userAccountControl sur les objetsuser et computer est utilisé pour décrire toute une série de propriétés, notamment l’état du compte (c’est-à-dire, L’attribut userAccountControl sur les objetsuser et computer est utilisé pour décrire toute une série de propriétés, notamment l’état du compte (c’est-à-dire activé ou désactivé), le verrouillage du compte, le mot de passe non requis, l’authentification par carte à puce requise, etc.

Les attributs searchFlags et systemFlags sur les objets attributeSchema définissent, entre autres, si un attribut est construit, indexé et inclus dans le cadre de la résolution des noms ambigus (ANR).

Pour effectuer une recherche sur ces types d’attributs, vous devez utiliser des filtres de recherche par bit. Il existe deux types de filtres de recherche par bit que vous pouvez utiliser, l’un représentant un OU logique et l’autre un ET logique. Ceci est mis en œuvre dans un filtre de recherche sous la forme d’une règle de correspondance. Une règle de correspondance est simplement un moyen d’informer le serveur LDAP (dans ce cas, un contrôleur de domaine) de traiter différemment une partie du filtre. Voici un exemple de ce à quoi ressemble une règle de correspondance :

(userAccountControl:1.2.840.113556.1.4.803:=514)

Le format est (attributename:MatchingRuleOID:=value).Comme je l’ai mentionné, il existe deux règles de correspondance par bit, qui sont définies par des OID. La règle de correspondance logique ET OID est 1.2.840.113556.1.4.803 et la règle de correspondance logique OU OID est 1.2.840.113556.1.4.804. Ces OIDs indiquent au serveur d’effectuer un traitement spécial sur le filtre. Un filtre OU logique renverra un succès si un bit spécifié par value, est stocké dans attributename. Alternativement, le filtre ET logique retournera le succès si tous les bits spécifiés parvalue, correspondent à la valeur deattributename. Peut-être qu’un exemple aidera à clarifier ceci.

Pour créer un compte utilisateur normal, vous devez mettreuserAccountControl à 514. Le nombre 514 a étécalculé en ajoutant l’indicateur de compte utilisateur normal de 512 à l’indicateur de compte désactivé de 2 (512 + 2 = 514). Si vous utilisez la règle de correspondance logique OU suivante contre la valeur 514, comme indiqué ici:

(useraccountcontrol:1.2.840.113556.1.4.804:=514)

alors tous les comptes d’utilisateur normaux (drapeau 512) OU les comptes désactivés (drapeau 2) seraient retournés. Cela comprendrait les comptes d’utilisateurs activés (à partir du drapeau 512), les comptes d’ordinateurs désactivés (à partir du drapeau 2) et les comptes d’utilisateurs désactivés (à partir du drapeau 2). Dans le cas deuserAccountControl, le drapeau 2 peut s’appliquer à la fois aux comptes d’utilisateur et d’ordinateur et, par conséquent, pourquoi les deux seraient inclus dans les entrées retournées.

Une façon de voir les avantages des règles de correspondance par bit est qu’elles vous permettent de combiner un tas de comparaisons en un seul filtre. En fait, il peut être utile de penser que le filtre OU précédent que je viens de montrerpourrait également être écrit en utilisant deux expressions:

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

Comme précédemment, cela correspondra aux userAccountControlattributs qui contiennent soit les drapeaux 2 ou 512.

Pour le ET logique, des principes similaires s’appliquent. Au lieu que n’importe lequel des bits du drapeau soit une correspondance possible, TOUS les bits du drapeau doivent correspondre pour qu’il renvoie un succès. Si nous modifions notre exempleuserAccountControl pour utiliser le ET logique, il ressemblerait à ceci:

(useraccountcontrol:1.2.840.113556.1.4.803:=514)

Dans ce cas, seuls les comptes d’utilisateurs normaux qui sont également désactivés seraient renvoyés. Le même filtre pourrait être réécrit en utilisant l’opérateur& au lieu de | comme suit:

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

Une subtilité importante à noter est que lorsque vous ne comparez qu’une seule valeur de drapeau binaire, la règle de correspondance OU logique et ET logique renvoie le même résultat. Donc, si nous voulions trouver tous les comptes d’utilisateurs normaux, nous pourrions effectuer une recherche sur le drapeau à un seul bit de 512 en utilisant l’une des deux méthodes suivantes :

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

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.