web-dev-qa-db-fra.com

Comment utiliser un filtre pour éviter une sous-unité d'organisation dans Active Directory?

J'ai une application qui extrait les informations utilisateur d'une unité d'organisation dans Active Directory. Les paramètres nécessaires sont une base de recherche et une chaîne de filtrage.

J'ai une unité d'organisation dont je veux extraire des informations, mais il y a une sous-unité que je veux éviter:

Voulait

utilisateurs de OU=People,DC=mydomain,DC=com

Non désiré

utilisateurs de OU=Evil,OU=People,DC=mydomain,DC=com

Je sais que cela pourrait être fait en réécrivant l'application effectuant l'importation pour l'empêcher de rechercher des sous-unités d'organisation, mais existe-t-il un moyen de le faire avec un filtre LDAP sur la recherche? Quelque chose comme (DistinguishedName !contains "Evil") ou similaire qui me permettra d'exclure des utilisateurs en fonction du chemin d'accès à l'utilisateur, plutôt que de filtrer sur une propriété de l'utilisateur.

18
DrStalker

Si vous utilisez System.DirectoryServices (.Protocols) dans .NET, vous pouvez définir SearchScope sur OneLevel pour rechercher uniquement dans People-OU (et pas de child-OUs). Mais cela ne fonctionnera pas si vous en avez OU=Good,OU=People,DC=mydomain,DC=com...

La deuxième option serait d'interroger l'unité People-OU pour toutes les sous-unités: s (objectClass=organizationalUnit), puis émettez plusieurs demandes de recherche; un pour chacun d'eux (sauf le "Mal").

Edit: @geoffc - ce sera vraiment difficile à implémenter. Par défaut, tous les utilisateurs authentifiés ont un accès en lecture à tous les objets dans Active Directory. Le simple fait de définir un "Refus de lecture" sur l'unité d'organisation Evil ne fera pas l'affaire car le droit de lecture pour les utilisateurs authentifiés est défini sur l'objet utilisateur individuel (dans ce cas) et a donc la priorité sur l'ensemble ACL Refuser défini sur l'unité d'organisation. Vous devrez essentiellement définir l'ACL de lecture refusée sur chacun des objets dans l'unité Evil-OU et toujours vous assurer que les nouveaux objets ajoutés au répertoire obtiennent le même ensemble de droits de refus. Vous pouvez modifier le schéma Active Directory et supprimer les droits des utilisateurs authentifiés, mais cela cassera beaucoup d'autres choses (y compris Exchange) et n'est pas pris en charge par Microsoft.

12
Per Noalt

AFAICT, cela ne peut pas être fait avec un filtre LDAP dans Active Directory. De nombreuses autres implémentations LDAP prennent en charge la correspondance extensible, mais AD ne le fait pas.

Les utilisateurs recommandent des filtres contenant (ou:dn:=Evil) ou les caractères génériques sur distinguishedName n'ont pas été testés par rapport à Active Directory.

7
esk

Ce qui suit fera l'affaire:

(&(objectClass=user)(!(distinguishedName:=%Evil%)))

J'ai rencontré un problème similaire lors de la création d'un carnet d'adresses pour la numérisation vers un e-mail. J'ai essayé (&(objectClass=user)(!(distinguishedName:=*Evil*))) mais il semble que certains MFP n'acceptent pas * en tant que caractère générique, mais ils acceptent %

6
Louis Reedijk

Selon http://www.zytrax.com/books/ldap/apa/component.html , il est possible d'obtenir ce que vous voulez en utilisant les filtres de composants LDAP. Voici un exemple qui correspondrait à ce que vous décrivez:

(&(objectClass=organizationalUnit)(!(ou:dn:=Evil)))

Cela correspond à tous les objets qui ont une objectClass of organizationUnit, mais rejette tout ce dont le DN contient un composant qui correspond à ou = Evil.

2
Ben Klang

Les objectClasses organizationalUnit et leur descendant inetOrgPerson permettent à l'attribut ou d'être présent dans une entrée. Ajoutez un attribut ou avec la valeur evil aux objets subordonnés au ou=evil branche et inclut l'assertion (!(ou=evil)) au filtre de recherche pour limiter les réponses de la liste des candidats à celles qui ne contiennent pas d'attribut ou avec la valeur evil. Alternativement, le LDAP Assertion Control pourrait être utilisé sur les demandes de la même manière pour garantir que les demandes qui contiennent un ou avec la valeur evil ne sont pas traitées. Les serveurs d'annuaire de qualité professionnelle compatibles LDAP prendront en charge ces deux méthodes.

1
Terry Gardner