.net - 在大型网络文件系统上快速设置可继承的 ACE

标签 .net powershell filesystems acl fast-enumeration

我对网络文件系统上的 ACL 有疑问。

基本上,我想在顶级文件夹对象上设置权限,该对象下面可能有 100,000 多个文件和文件夹对象。我希望该权限可通过所有子文件夹和子文件继承(IE“应用于文件、文件夹和子文件夹”为true)。

我不想废弃任何现有的可继承权限(即“用该对象的可继承权限替换所有子对象权限”为false)。

因此,当我运行 Set-ACL、SetACL.exe、XCACLS.vbs,甚至使用 Windows GUI 时,该过程需要很长时间才能完成 - 显然是由于子目录太大。

我现在已经习惯了,但是:

我想知道 - 为什么到底会这样?

归根结底,我不是只在一个文件夹对象上编写一个 ACE 吗?

  • 我没有遍历目录;
  • 我不会修改子文件和文件夹上的各个 ACL(我不这么认为);和
  • 我不会替换权限

我假设如果您访问子文件夹/文件对象,它会检查它的显式 ACE 以查看您是否有权限,如果您没有权限,它会检查是否有任何可继承的权限(来自父文件夹)对象)可能会为您提供访问权限。

那么,设置可继承权限是否也会导致将新的单独 ACE 写入每个子文件和文件夹,即使您在技术上只在顶层设置一个 ACE?

是否有任何方法可以在顶层设置 ACE,而无需使用命令来枚举整个子目录?我希望快速有效地处理大量文件和文件夹。

我希望这是有道理的。期待任何建议。

里斯。

最佳答案

继承权限(如显式权限)在标志位字段 ( more info ) 的安全描述符的位掩码中在文件夹/文件级别设置。这就是为什么在父文件夹级别设置传播到子文件夹(继承)的权限可能会很长,具体取决于有多少子文件夹受到影响。

基于此,答案是否定的:您无法在顶层设置 ACE,并且没有命令去枚举整个子目录。

您可以测试以编程方式在所有子项上设置显式 acl 是否比继承过程更快。

关于.net - 在大型网络文件系统上快速设置可继承的 ACE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9834269/

相关文章:

c# - WCF 服务客户端 : Customized soap envelope not being sent on the wire

c# - 避免使用单独的线程从 BlockingCollection 获取重复值

.net - 序列化如何在 .Net 中工作

powershell - 将单个文件复制到不存在的文件夹

c# - Powershell 输出格式

powershell - 解决错误 为 "Save"找到多个不明确的重载

git - 应该在哪里创建 git 存储库?

c# - 是否可以在表单中将 HTML 按钮设置为默认按钮?

unit-testing - 单元/集成测试中文件系统依赖关系的最佳实践

c++ - 我可以使用掩码在 Boost 目录中迭代文件吗?