Конвертировать SID в имена пользователей / группы? - PullRequest
4 голосов
/ 16 декабря 2010

Я перебираю сетевой каталог и пытаюсь вывести имена пользователей / групп (разрешения), связанные с каждым файлом / папкой.Я получаю SID, но мне нужны имена типа «group_test», а не «S-1-5-32-544».Вот мой код -

var files = Directory.GetFiles(path, "*.*", SearchOption.TopDirectoryOnly);

                foreach (var f in files2)
                {
                    var fileInfo = new FileInfo(f);
                    var fs = fileInfo.GetAccessControl(AccessControlSections.Access);

                    foreach (FileSystemAccessRule rule in fs.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
                    {
                        var value = rule.IdentityReference.Value;
                        Response.Write(string.Format("File: {0} \t Usergroup: {1} <br/>", fileInfo.Name, value));
                    }  }

Я получаю SID из вышеуказанного кода, но в цикле foreach, если я использую это вместо -

(NTAccount)((SecurityIdentifier)rule.IdentityReference).Translate(typeof(NTAccount)).Value

Я получаю это исключение - Some or all identity references could not be translated.

Похоже, что метод Translate не работает на удаленных общих ресурсах.Как я могу получить реальные имена SID?Удаленный сервер не имеет LDAP.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 16 декабря 2010

Проблема заключается в том, что вы пытаетесь разрешить SID, локальный , для удаленного компьютера.В ответ на этот вопрос гласит:

Метод Translate объекта SecurityReference работает с нелокальными идентификаторами безопасности, но только для учетных записей домена ...

Эта ссылка предоставляет пример для удаленного разрешения SID с помощью WMI, который, вероятно, является лучшим методом для выполнения вашей задачи.

0 голосов
/ 16 декабря 2010

Если вы можете использовать WMI, вы сможете сделать это с помощью класса Win32_UserAccount , я думаю.Он имеет свойство Name и свойство SID.

Или класс Win32_Group для групп.

Ниже приведена статья о подключении к удаленному компьютеру с помощьюWMI с кодом C #: Как: подключиться к удаленному компьютеру

...