65.9K
CodeProject 正在变化。 阅读更多。
Home

C# 2.0 中的访问控制列表

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (6投票s)

2006年10月6日

CPOL

1分钟阅读

viewsIcon

54723

downloadIcon

793

用于枚举所有访问控制列表条目的工具。

Sample Image - ADPermissions.jpg

引言

我创建了一个 ACL 查看器实用工具,它执行以下操作:

  1. 仅解析当前域和信任域中的 SID。目前它无法解析整个林和一些众所周知的 SID。
  2. 显示分配给受托者的所有权限。
  3. 显示继承信息。
  4. 解析所有对象 GUID ==> 属性、属性集和对象类型。

微软开发了一种非常好的架构,用于在 .NET 中从 Active Directory 获取数据。但是,我没有找到关于该架构的好的文档。我进行了一些研发,并创建了一个 ACL 查看器,我需要它来测试我的有效权限算法。

我将在下一篇文章中讨论有效权限。这只是 Active Directory 中权限的开始。

算法

输入

  1. 对象的 LDAP 路径
  2. 凭据 => 用户名和密码

输出

  • 列出分配在给定对象上的所有权限

算法

  1. 使用凭据绑定到对象 ==> 使用 DirectoryEntry 类来实现
  2. 从对象获取安全信息 ==> 使用 ActiveDirectorySecurity 类来实现
  3. 从安全信息获取安全描述符 ==> 以 SDDL 格式 (基本上是一个 字符串 格式)
  4. 获取所有访问规则、访问控制项 ==> 使用 AuthorizationRuleCollection 类来实现
  5. 对于每个规则,解析 SID 和对象类型
  6. 向用户显示所有条目

代码

DirectoryEntry objDE = new DirectoryEntry(adPath, credUser, credPassword);
ActiveDirectorySecurity adSecurity = objDE.ObjectSecurity;
string sd = adSecurity.GetSecurityDescriptorSddlForm(AccessControlSections.All);
AuthorizationRuleCollection rules = 
    adSecurity.GetAccessRules(true, true, typeof(NTAccount);

NTAccount 类解析当前域中的 SID。我使用 ::LookupAccountSid 来解析信任域中的 SID 和解析众所周知的 SID。

为了解析对象类型,我从 Active Directory 获取所有对象类型并缓存它们。代码非常简单,你可以很容易地理解它。

如果您仍然遇到问题,请通过 SumitKJain@hotmail.com 与我联系。

历史

  • 2006 年 10 月 6 日:初始发布
© . All rights reserved.