1

我有一个 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;
}

有人对我应该检查什么以确保我没有遗漏任何东西有任何建议吗?这样做的任何替代方法?

4

1 回答 1

0

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

  1. 打开共享文件夹的属性
  2. 单击“共享”选项卡
  3. 点击“高级共享”
  4. 点击“权限”
  5. 确保该帐户具有“完全控制”
于 2013-02-28T16:03:21.793 回答