为什么Windows在更改父级ACL时会处理所有NTFS子对象?


10

为什么Windows在更改父级ACL时会处理所有NTFS子对象?

如果我已选中“替换所有子对象权限...”框,则可能会出现这种情况,但是即使不选中该框,Windows也会处理所有子对象。


@Ben它不是由外壳程序完成的,因为必须将继承权限的级联复制到启用了继承的所有子对象上,因此即使直接调用Windows API,也必须这样做。仅供参考:出于性能原因复制权限。
安德里亚斯(Andreas)'18

Answers:


10

在Windows中,文件权限不是动态继承的。也就是说,尝试打开文件时,Windows仅查看该文件的ACL,而不查看包含该文件的树中目录的ACL。这意味着,当您更改目录的ACL时,Windows必须立即更新受影响目录中所有文件和子目录的权限。

在Windows 中,ACL中的继承设置不表示任何形式的动态继承。它只是一个标志,指示在修改父目录的ACL时,树中所有设置了继承标志的文件和子目录也必须更新。

我们这些年龄足够大的人记得Novell NetWare会记住这是与NetWare的最大区别之一,因为在NetWare中,权限的继承是动态的。尽管历史已使该问题无济于事,但当时仍存在很多关于哪种方法更好的争论。动态ACL要求操作系统在尝试打开文件时检查每个父目录的ACL,但是更改ACL很快。在Windows中,打开文件仅需要检查一个ACL,但是正如您所发现的,这意味着更改目录ACL可能很慢。


1
这是很合理的。对ACL的读取要比写入的要多得多,因此有意义的是缓存“继承的值”以实现更快的读取访问,但在较罕见的写入用例中,代价是更加复杂。
亚历山大-恢复莫妮卡

@亚历山大:我不明白的是为什么这种复杂性必须暴露给最终用户。为什么不撒谎并告诉最终用户“它是动态的”,而是在内部缓存内容?
凯文

@Kevin-因为传播权​​限可能需要一些时间,并且在那个时间段内您可能没有按预期的那样执行权限?
davidbak

13

配置为从父对象继承其权限的任何子对象都需要进行处理。子对象上明确定义的权限不受影响。

选项“替换所有子对象的权限”不仅将权限传播到所有子对象,还将删除并替换所有子对象上任何明确定义的权限。


5

默认情况下,子文件夹从父文件夹继承权限。假设在父文件夹(此文件夹,子文件夹和文件)上添加/修改权限时使用默认范围,则所有子文件夹都将更新以反映父文件夹的权限更改。

您所指的复选框是“一次性”操作,它将删除所有子文件夹上的所有显式定义的权限,并将其替换为来自父文件夹的可继承权限,并将重新启用子文件夹上的权限继承。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.