В C# DirectoryEntry возвращает пустую коллекцию AuditRules, даже если правила аудита существуют.C#

Место общения программистов C#
Ответить
Anonymous
 В C# DirectoryEntry возвращает пустую коллекцию AuditRules, даже если правила аудита существуют.

Сообщение Anonymous »

Я пытаюсь создать консольное приложение C# для управления разрешениями аудита в домене (а не в файловой системе). Моя проблема в том, что я не могу прочитать существующие правила аудита на C#, я получаю только пустую коллекцию, хотя я уверен, что в домене есть правила аудита.
Мне нужно управлять более чем 100 независимыми доменами, поэтому я хочу найти программное решение, которое поможет управлять ими.
Я могу сделать это без проблем в PowerShell, используя следующую команду.
$acl = Get-Acl -Path "DC=mydomain,DC=local" -Audit
$acl.Audit

Это возвращает набор из 5 правил аудита. Однако при попытке выполнить ту же операцию на C# правила аудита не возвращаются.
string path = "LDAP://mydomain.local/DC=mydomain,DC=local";
DirectoryEntry domain = new DirectoryEntry(path);

AuthorizationRuleCollection authorizationRuleList1 = domain.ObjectSecurity.GetAuditRules(true, true, typeof(NTAccount));
AuthorizationRuleCollection authorizationRuleList2 = domain.ObjectSecurity.GetAuditRules(true, true, typeof(System.Security.Principal.SecurityIdentifier));

Console.WriteLine("Authorization Rules 1: " + authorizationRuleList1.Count);
Console.WriteLine("Authorization Rules 2: " + authorizationRuleList2.Count);

Выполнение вышеописанного показывает 0 правил аудита. Как ни странно, правила доступа возвращаются без проблем.
Я пробовал
  • Явно применить пароль для инициализации DirectoryEntry.
  • Запустить «Запуск от имени администратора».
  • Проверить наличие разрешений аудита с помощью проводника LDAP.
Будем очень признательны за любые указатели.
Обновлен код с использованием ActiveDs для получения дескриптора безопасности.
string path = "LDAP://demo.local/DC=demo,DC=local";
DirectoryEntry domain = new DirectoryEntry(path);
var ntSecurityDescriptor = domain.Properties["ntSecurityDescriptor"];

ActiveDs.ADsSecurityUtility secUtility = new ActiveDs.ADsSecurityUtility();
ActiveDs.IADsSecurityDescriptor sd = (IADsSecurityDescriptor)ntSecurityDescriptor[0];
ActiveDs.IADsAccessControlList aclList = ActiveDs.IADsAccessControlList)sd.DiscretionaryAcl;


Подробнее здесь: https://stackoverflow.com/questions/781 ... hough-audi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»