本文提供了一个解决方案,用于解决移动文件夹时继承的权限不会自动更新的问题。
原始 KB 数: 320246
现象
访问控制列表(ACL)可能会显示标记为已从父级继承的权限,但父级本身可能没有在其 ACL 中配置的这些权限。 即使仍启用继承,也可能出现此症状。 对父文件夹 ACL 的任何后续更改都会导致子文件夹的 ACL 接收继承的权限。 此外,任何更改子项 ACL 的尝试都会导致应用继承(除非更改将 ACL 标记为受继承保护)。 如果在开始编辑 ACL 之前未注意到继承状态,则此行为可能令人吃惊。
注意
运行基于 Windows Vista 的计算机时,移动文件夹无法导致此行为。 移动操作现在有效,因为文件夹或文件可以继承目标文件夹或文件的 ACL。 文件夹或文件还具有标记为已从父级继承的权限。 这是从 Windows XP 到 Windows Vista 和 Windows Server 2008 的设计变化。
原因
此行为可能是移动文件夹引起的。 移动文件夹时,ACL 不会更改,并且继承的权限不会更新。 请注意, 本文上下文中的移动 始终意味着在同一卷内移动。
移动文件或文件夹时,ACL 也会移动,并且不会以任何方式更改。 即使为此文件夹启用了继承,继承的权限也不会自动更新。 下次更改权限时,ACL 将更新,这会强制父级传播其权限。
此行为也可能由:
- 使用 CACLS 设置父文件夹的权限不会传播到子文件夹。 /T 选项并不意味着使用继承传播权限,而是覆盖所有 ACL。
- 使用不自动传播继承的 API(如Adssecurity.dll)设置父文件夹的权限。
- 从备份还原到其他位置。
解决方法
若要避免意外的权限更改,请将文件/文件夹的 ACL 设置为 受保护 ,然后再移动以保留设置。 否则,请使用资源管理器 ACL 编辑器手动更新移动的文件/文件夹的 ACL。 禁用并再次启用继承,以强制使用正确的继承权限更新 ACL。 还可以使用 VBScript 自动执行此过程。
Status
此行为是特意这样设计的。 由于 Windows Vista 中的设计修改,此行为不会发生。
重现行为的步骤
- 使用 everyone:read* 和 users:change 权限创建 test1*** 文件夹。
- 创建 test1\sub 子文件夹并启用父级(默认值)的继承。 此文件夹应显示 everyone:read 和 users:change 作为继承的权限。
- 仅使用管理员:完全控制权限创建另一个文件夹 test2。
- 将 子 子文件夹移动到 test2。
- 查看 test2\sub 上的权限,查看 everyone:read 和 users:change 作为继承的权限,尽管父权限是 管理员:完全控制。
- 将另一个组/用户(例如来宾)添加到子授予的 ACL,例如,使用资源管理器 ACL 编辑器读取访问权限。 单击“应用”后,将删除 everyone:read 和 users:change,并且仅管理员:完全控制显示为刚添加的权限旁边的继承权限。