4 votes

Pourquoi le fait de changer le "Groupe primaire" d'un utilisateur de "Utilisateurs du domaine" dans Active Directory bloque-t-il une recherche récursive d'utilisateurs ?

Étant donné la hiérarchie simple OU/Groupe suivante :

OU=MyApplication
    CN=CompanyClients(objectClass="group"; Members="Clients\Client1")
    OU=Clients
        CN=Client1(objectClass="group"; Members=".\client1-emp1; .\client1-emp2")
        CN=client1-Emp1 (objectClass="user"; Primary Group="Client1")
        CN=client1-Emp2 (objectClass="user"; Primary Group="Domain Users")

Pourquoi la recherche récursive suivante ne tient-elle pas compte du client1-emp1 simplement parce que son groupe primaire n'est pas défini comme "Utilisateurs du domaine" ou "Invités du domaine" ? Par ailleurs, quels autres groupes peuvent être définis comme groupe primaire pour que emp1 soit inclus dans la recherche ?

using System.DirectoryServices.AccountManagement;

var ctx = new PrincipalContext(ContextType.Domain, "mydomain.org");
var group = GroupPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "CompanyClients");

var results = group.GetMembers(recursive:true);
//results excludes client1-emp1 but includes client1-emp2
foreach (var principal in results)
{
    Debug.WriteLine("Principal:" + principal.SamAccountName);
}

Résultats :

Principal: client1-emp2

2voto

Paolo Tedesco Points 22442

Si vous vérifiez la propriété "memberOf" d'un objet dans Active Directory (vérifiez par exemple votre propre compte), vous verrez qu'elle n'est pas inclure votre groupe primaire (qui est très probablement "Utilisateurs du domaine"). Vous pouvez voir quel est le groupe primaire d'une personne en consultant la propriété "primaryGroupID", qui est "513" si votre groupe primaire est "Domain Users".

De même, si vous vérifiez la propriété "member" de "Domain Users", vous ne sera pas voir les personnes qui ont les utilisateurs du domaine comme groupe primaire.

Je me souviens avoir lu quelque part que cela est fait pour des raisons de performance (bien sûr, je ne peux pas trouver l'article maintenant), car avoir un groupe avec trop de membres aurait un impact sur la performance dans certaines circonstances.

Probablement, le GetMembers méthode de GroupPrincipal ne recherche pas les utilisateurs qui ont le groupe comme groupe primaire (c'est-à-dire qu'il ne vérifie pas l'attribut PrimaryGroupId), c'est pourquoi vous ne voyez pas l'un des membres.

Cet article explique comment résoudre le groupe primaire d'un utilisateur. Je pense que vous devriez être en mesure d'utiliser les concepts expliqués ici pour résoudre votre problème : Comment utiliser l'attribut PrimaryGroupID pour trouver le groupe primaire d'un utilisateur ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X