ACL 技术体系结构

本文介绍如何使用.NET Framework中的System.Security.AccessControl命名空间管理和操作访问控制列表(ACL)。包括使用不同类创建、修改ACL,以及如何添加、移除访问规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

  • 加密密钥

  • 目录

  • 事件等待句柄

  • 文件

  • Mutex

  • 注册表项

  • 信号量

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

ACL 类的层次结构

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

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

  • 封装访问控制项 (ACE) 的类。该类采用名称 <Resource Name>AccessRule

  • 封装审核 ACE 的类。该类采用名称 <Resource Name>AuditRule

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

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

向 ACL 添加 ACE

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

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

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

方法 说明

AddAccessRule

-和-

AddAuditRule

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

SetAccessRule

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

SetAuditRule

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

ResetAccessRule

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

RemoveAccessRule

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

RemoveAuditRule

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

RemoveAccessRuleAll

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

RemoveAuditRuleAll

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

RemoveAccessRuleSpecific

-和-

RemoveAuditRuleSpecific

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

AddAccessRule

-和-

AddAuditRule

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

  •  

获取和设置 ACL

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值