【问题标题】:C# File/Directory PermissionsC# 文件/目录权限
【发布时间】:2010-09-30 14:25:14
【问题描述】:

我正在编写一个应用程序来管理用户对文件的访问。一个很长的故事的简短版本是我必须使用目录和文件权限才能做到这一点。我们廉价的 CEO 没有文档管理系统...

无论如何...除了用户可以查看目录中的哪些文件但实际上看不到文件内容的情况外,我一切正常。 (文件中可能包含敏感的 HR 数据。)

我尝试了 FileSystemRights.ListDirectory,但这似乎(尽管 MS 文档)也将 ReadData 设置为 true。我关闭了 ReadData(读取文件的能力),我突然无法再次访问该目录。两者似乎是联系在一起的。

有什么想法可以设置哪些权限来实现这一点?

我当前的代码是:

SetSecurity(pth, usr, FileSystemRights.ListDirectory, AccessControlType.Allow);

...

public void SetSecurity(string dirName, string account,
    FileSystemRights rights, AccessControlType controlType)
{
    // Get a FileSecurity object that represents the
    // current security settings.
    DirectorySecurity dSecurity = Directory.GetAccessControl(dirName);

    dSecurity.AddAccessRule(new FileSystemAccessRule(account, rights, controlType));

    // Set the new access settings.
    Directory.SetAccessControl(dirName, dSecurity);
}

谢谢。

--杰瑞

【问题讨论】:

    标签: c#


    【解决方案1】:

    FileSystemRights 枚举将 ReadData 和 ListDirectory 都映射到值 1,因此就 .NET 而言,两者 100% 等效。

    您是否尝试过 Traverse 而不是 ListDirectory?

    编辑:根据this KB 文章,Windows XP 似乎也认为它们是相同的,只有一个仅适用于文件,一个仅适用于目录。

    编辑 2:只要您将 ReadData/ListDirectory 访问规则设置为不被子对象继承,您应该能够将其应用于目录,而无需将其应用于目录中的文件。 FileSystemAccessRule 类确实支持更改继承标志。

    【讨论】:

      【解决方案2】:

      文件可能从父级继承安全属性。

      在调用 Directory.SetAccessControl(); 之前,您可以尝试调用 DirectorySecurity.SetAccessRuleProtection(true, false) 以防止文件继承;

      【讨论】:

      • 是的。这些文件是从文件夹继承的。还有一个“CEO 拒绝购买真正的文档管理解决方案”的问题,我们必须解决。
      • 在不继承特定文件夹的情况下进行测试后,您是对的。您可以启用该文件夹,然后禁用该文件本身,它会按需要运行......但由于其他原因,这不是我们的选择。
      【解决方案3】:

      是的。 Traverse(我认为它命名错误)允许我在文件夹中执行程序,但不能查看文件夹的内容。老实说,不确定为什么这很有用。

      我正要告诉 CEO,这是不可能的,然后眼睁睁地看着火花再次飞扬。 :P

      【讨论】:

      • 能够绕过遍历检查使得文件访问 O(1) 而不是 O(n)。想象一下试图打开嵌套 12 个目录的 100 个文件。如果可以绕过遍历检查,则只需进行 100 次 ACL 检查;如果没有,你必须做 1200 次检查。
      【解决方案4】:

      这是在 FileSystemAccessRule 被实例化时没有设置的继承和传播值..

      【讨论】:

        猜你喜欢
        • 2010-12-04
        • 2010-09-24
        • 2012-07-07
        • 2017-01-15
        • 2017-11-03
        • 2013-07-30
        • 2018-04-26
        • 2011-08-30
        • 2014-06-21
        相关资源
        最近更新 更多