Добавьте группы безопасности в папку эмиссии / System.Security.Principal.IdentityNotMappedException:

Я борюсь со странной проблемой, и мне интересно, если кто-нибудь может мне помочь, пожалуйста. В какой-то момент моей программы мне нравится добавлять группы безопасности с соответствующими правами доступа к папке. Шаги выглядят так.

  1. Создать папку
  2. Создать домен локальной группы безопасности
  3. Создать группу глобальной безопасности
  4. Добавить глобальную группу в локальную группу
  5. Добавить локальную группу безопасности домена в папку "\domain\dfs\folder"

Я получил ниже кусок кода, чтобы сделать это со страницы Microsoft

 public static void AddDirectorySecurity(string DirectoryName, string Group, FileSystemRights Rights, InheritanceFlags iFlag, PropagationFlags pFlag, AccessControlType ControlType)
{
    // Create a new DirectoryInfo object.
    DirectoryInfo dInfo = new DirectoryInfo(DirectoryName);

    // Get a DirectorySecurity object that represents the  
    // current security settings.
    DirectorySecurity dSecurity = dInfo.GetAccessControl();

    // Add the FileSystemAccessRule to the security settings. 
    dSecurity.AddAccessRule(new FileSystemAccessRule(Group,Rights,iFlag,pFlag,ControlType));

    // Set the new access settings.
    dInfo.SetAccessControl(dSecurity); // 

}

процедура добавления выглядит так:

path = @"\\domain\dfs\folder"

gRDL_RW = "RDL-group-RW"

    AddDirectorySecurity(path, gRDL_RW, FileSystemRights.Modify, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow);

Он отлично работает в моей тестовой среде, но когда мне нравится запускать его в производственной среде, я получаю сообщение об ошибке:

************** Exception Text **************
System.Security.Principal.IdentityNotMappedException: Some or all identity references could not be translated.
at System.Security.Principal.NTAccount.Translate(IdentityReferenceCollection sourceAccounts, Type targetType, Boolean forceSuccess)
at System.Security.Principal.NTAccount.Translate(Type targetType)
at System.Security.AccessControl.CommonObjectSecurity.ModifyAccess(AccessControlModification modification, AccessRule rule, Boolean& modified)
at System.Security.AccessControl.CommonObjectSecurity.AddAccessRule(AccessRule rule)
at Program_dev_1.Form1.button1_Click(Object sender, EventArgs e) in  c:\Users\?????????\Documents\Visual Studio 2012\Projects\brite_dev_1\brite_dev_1\Form1.cs:line 191
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Это проблема с "правами администратора"? У меня есть Бог, как разрешения в производственной среде. Так, что происходит?

У меня есть чувство, что по каким-то причинам все эти понятные имена, такие как "FileSystemRights.Modify", не могут быть переведены. Я проверяю локаль в тестовой среде и среде prod, и они одинаковы.

Можно ли использовать необработанные числа, которые скрываются за этими понятными именами?

Может быть, есть другой способ добавить группы безопасности в папку? Все, что мне действительно нравится - это рабочее решение.

1 ответ

Приложение ломалось, когда группы пытались добавить в папку, потому что вновь созданные группы не были сразу известны всем контроллерам домена. Мне пришлось создать процедуру, которая проверяет, были ли вновь созданные группы синхронизированы по всему имуществу, прежде чем переходить к остальной части кода. Это невозможно или я не могу найти способ указания контроллера домена, который используется при добавлении групп в разрешение папки.

Другие вопросы по тегам