Active Directory security-пользователь на компьютере?

У меня есть задача выбрать определенную группу компьютеров. Их уникальное свойство заключается в том, что их список безопасности содержит разрешение для конкретного пользователя. В AD tool-щелкните правой кнопкой мыши на компьютере, вкладка безопасности, группы или имена пользователей, как показано на скриншоте:
Скриншот рекламы

Я могу получить объект ComputerPrincipal соответствующего хоста, UserPrincipal пользователя и оба базовых объекта DirectoryEntry, но я борюсь, чтобы сделать «соединение» и найти, если пользователь находится в списке.

Я использую C#,.NET3.5.

1 ответ

  1. Вы должны будете петля через каждую группу, и для каждой группы вы могли бы сделать что-то вроде этого (предполагая, что у вас естьgroupDe, который является DirectoryEntry для группы):

    foreach (var identityReference in groupDe.ObjectSecurity.GetAccessRules(true, false, typeof(System.Security.Principal.SecurityIdentifier)) {
        var nt_name = identityReference.Translate(typeof(NTAccount)).Value;
        //nt_name.Value is now domain\username of the user this permission is for
        //so you can match this against your list of users
    }
    

    falseIn the call to GetAccessRulesзаставляет его не смотреть на унаследованные разрешения (я предположил, что это то, что вы хотите).

    Я не тестировал это, поэтому может потребоваться некоторая настройка.

    Это, вероятно, будет очень медленный процесс, в зависимости от того, сколько групп вы просматриваете. Возможно, вы сможете сделать это быстрее, пропустив вызов Translate. identityReference.Valueбыло бы (я считаю) SID, поэтому вы могли бы попытаться соответствовать SID, а не переводить на что-то другое перед соответствием.