用户具有完全控制权时,DirectorySecurity.SetAccesesControl上的UnauthorizedAcccesException

时间:2013-02-27 22:31:21

标签: c# security directory

我有一个C#控制台应用程序正在创建一个目录,然后尝试为该域用户提供该目录的修改访问权限。该应用程序已经运行了很长时间,但突然间它开始在UnauthorizedAcccesException方法上抛出DirectorySecurity.SetAccessControl

我使用WindowsIdentity.GetCurrent获得了当前的用户帐户,并确认它是我期望的帐户(因为登录的用户没有足够的访问权限,因此会模拟超级用户)。我已经检查了创建的目录上的超级用户的权限,并且他们具有完全控制权。

private DirectoryInfo CreateFolderWithOpenAccess(string directoryPath)
{
  DirectoryInfo directory = Directory.CreateDirectory(directoryPath);
  DirectorySecurity directorySecurity = directory.GetAccessControl();

  if (!HasModifyAccess(directory))
  {
    directorySecurity.AddAccessRule(
      new FileSystemAccessRule(
        Settings.Default.DomainUsers, 
        FileSystemRights.Modify,
        InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
        PropagationFlags.None, 
        AccessControlType.Allow
      )
    );

    directory.SetAccessControl(directorySecurity);
  }

  return directory;
}

有没有人对我应该检查什么有任何建议,以确保我没有遗漏任何东西?有没有其他方法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

我与我们IT部门的人员进行了核实,他们提醒我,我正在使用网络文件共享访问我正在创建的文件夹。事实证明,即使该帐户对共享中的所有文件和文件夹具有“完全控制”权限,它也无法访问更改权限,因为它在共享级别没有“完全控制”权限。造成这种情况的原因是我们的数据服务器上的文件夹混乱,其中一个IT人员重新创建了共享但没有重新创建该帐户的“完全控制”权限。共享权限可以通过以下方式找到:

  1. 打开共享文件夹的属性
  2. 点击“分享”标签
  3. 点击“高级分享”
  4. 点击“权限”
  5. 确保帐户具有“完全控制权”