ACL 技术体系结构

更新:2007 年 11 月

System.Security.AccessControl 命名空间通过一些方便的类(这些类抽象化 Windows ACL 安全系统的大部分复杂性)提供对访问控制列表 (ACL) 的访问。 此外,System.Security.AccessControl 命名空间还包含几个提供对 Windows ACL 安全系统的高级访问的类。

.NET Framework 提供对下列资源的 ACL 的访问:

  • 加密密钥

  • 目录

  • 事件等待句柄

  • 文件

  • Mutex

  • 注册表项

  • 信号量

上述每个资源都有几个用于创建和修改 ACL 的类。

ACL 类的层次结构

对于大多数情况,您可以使用较高级别的抽象类(而不是使用高级类)来创建和修改 ACL。 对于每个资源,较高级别的类采用以下形式:

  • 封装自由访问控制列表 (DACL) 和系统访问控制列表 (SACL) 的类。此类采用名称 <资源名称>Security。 例如,FileSecurityDirectorySecurity 类封装文件和文件夹的 DACL 和 SACL。

  • 封装访问控制项 (ACE) 的类。此类采用名称 <资源名称>AccessRule。

  • 封装审核 ACE 的类。此类采用名称 <资源名称>AuditRule。

  • 几个用于创建特定访问规则和审核规则的枚举。

  • 有关所有高级别 ACL 类的完整列表,请参见 ACL 技术摘要

向 ACL 添加 ACE

使用某个访问规则或审核规则类创建 ACE 之后,可以向资源添加规则或使用 ACE 从资源中移除现有规则。 例如,您可以使用 FileSystemAccessRule 类创建一条规则,指定只有管理员可以打开某个文件。 然后可以向 FileSecurity 对象添加该规则或从 FileSecurity 对象中移除类似规则。

添加授予访问权限的 ACE 并不保证主体将收到访问权限,因为拒绝规则始终优先于允许规则。 例如,向某个文件添加系统帐户的允许访问规则并不意味着用户将具有相应的访问权限,因为他们对文件的访问权限可能被另一个规则拒绝。

与资源关联的每个 <资源名称>Security 对象提供以下方法来添加或移除访问规则及审核规则。

方法

说明

AddAccessRule

-和-

AddAuditRule

搜索可以与新规则合并的访问规则或审核规则。如果未找到符合条件的规则,则添加新规则。

SetAccessRule

移除所有使用相同用户和 AccessControlType 值(Allow 或 Deny)作为指定规则的访问控制规则,然后添加指定的规则。

SetAuditRule

移除所有使用相同用户作为指定规则的审核规则(无论 AuditFlags 值是什么),然后添加指定的规则。

ResetAccessRule

移除所有使用相同用户作为指定规则的访问控制规则(无论 AccessControlType 值是什么),然后添加指定的规则。

RemoveAccessRule

搜索使用相同用户和 AccessControlType 值(Allow 或 Deny)作为指定规则并且具有兼容的继承和传播标志的访问控制规则。如果找到符合条件的规则,则从规则中移除指定的访问规则中包含的权限。

RemoveAuditRule

搜索使用相同用户作为指定规则并且具有兼容的继承和传播标志的审核控制规则。如果找到符合条件的规则,则从规则中移除指定规则中包含的权限。

RemoveAccessRuleAll

搜索所有使用相同用户和 AccessControlType 值(Allow 或 Deny)作为指定规则的访问规则,如果找到符合条件的规则,则移除它们。

RemoveAuditRuleAll

搜索所有使用相同用户作为指定规则的审核规则,如果找到符合条件的规则,则移除它们。

RemoveAccessRuleSpecific

-和-

RemoveAuditRuleSpecific

搜索完全匹配指定规则的访问规则或审核规则,如果找到符合条件的规则,则移除该规则。

AddAccessRule

-和-

AddAuditRule

搜索可以与新规则合并的访问规则或审核规则。如果未找到符合条件的规则,则添加新规则。

获取和设置 ACL

每个受保护的资源都具有用于获取和设置与资源关联的 <资源名称>Security 对象的方法。 要检索特定资源的现有 ACL,请使用与该资源关联的 GetAccessControl 方法之一。 要将更改转播回资源,请使用与该资源关联的 SetAccesscontrol 方法之一。 注意,除非使用 set 方法之一显式重新应用更改,否则更改不会传播回资源。

有关每个受保护资源的所有 get 和 set 方法的完整列表,请参见 ACL 技术摘要

请参见

其他资源

ACL 技术概述

.NET Framework 中的安全性