Почему изменение «Первичной группы» пользователя с «Пользователи домена» в Active Directory блокирует рекурсивный поиск пользователей? - PullRequest
4 голосов
/ 26 мая 2011

Учитывая следующую простую иерархию OU / Group:

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")

Почему в следующем рекурсивном поиске будет пропущен client1-emp1 просто потому, что в его основной группе не задано значение «Пользователи домена» или «Гости домена»?Кроме того, какие другие группы могут быть установлены в качестве основной группы, чтобы emp1 успешно включался в поиск?

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);
}

Результаты:

Principal: client1-emp2

1 Ответ

2 голосов
/ 26 мая 2011

Если вы проверите свойство memberOf объекта в Active Directory (например, проверьте свою учетную запись), вы увидите, что не включает вашу основную группу (которая, скорее всего, «Пользователи домена»)).Вы можете увидеть, что является основной группой человека, посмотрев на свойство «primaryGroupID», которое равно «513», если ваша основная группа - «Пользователи домена».

Точно так же, если вы проверите свойство "member" в "Пользователи домена", вы не увидите людей, которые имеют пользователей домена в качестве основной группы.

Я помнюгде-то читал, что это сделано из соображений производительности (конечно, сейчас я не могу найти статью), поскольку наличие группы с слишком большим количеством членов может повлиять на производительность при некоторых обстоятельствах.

Возможно, метод GetMembers для GroupPrincipal не выполняет поиск пользователей, которые имеют группу в качестве основной группы (т. Е. Не проверяет атрибут PrimaryGroupId), поэтому вы не видите ни одного члена.

В этой статье объясняется, как разрешитьосновная группа для пользователя, я думаю, вы должны быть в состоянии использовать концепции, описанные здесь, для решения вашей проблемы: Как использовать атрибут PrimaryGroupID для поиска основной группы для пользователя

...