2

我正在尝试创建一个函数,在其中输入安全组名称并返回安全权限列表。

如何使用 C# 从 Active Directory获取安全组(例如read、等)的安全权限列表(例如write、等) ?full controlDomain ControllersDomain Guests

4

1 回答 1

2

您需要检查要与 Active Directory 服务器通信的 LDAP 连接的路径。

例如:

 DirectoryEntry rootDSE = null;
  rootDSE = new DirectoryEntry("LDAP://OU=" + department + ",OU=Users,OU=" + ou + ",dc=corp,dc=local", username, password);

现在在这种情况下,我只需要Department → Users → OU → DC中存在的组

和你的情况一样。您可以定义您的安全组存在于哪个 OU。

之后,我可以获取这样的组:

DirectorySearcher ouSearch = new DirectorySearcher(rootDSE);
ouSearch.PageSize = 1001;
ouSearch.Filter = "(objectClass=group)";
ouSearch.SearchScope = SearchScope.Subtree;
ouSearch.PropertiesToLoad.Add("name");
SearchResultCollection allOUS = ouSearch.FindAll();
foreach (SearchResult oneResult in allOUS)
{
     dt.Rows.Add(oneResult.Properties["name"][0].ToString());
}
rootDSE.Dispose();

现在在权限的情况下

权限存储在单独的文件系统项目上,例如文件和/或目录 - 或其他对象(如注册表项等)。当您拥有 AD 组或用户帐户时,您可以读取其 SID(安全标识符)属性 - 该 SID 将显示在整个 Windows 的 ACL(访问控制列表)中 - 但从用户或组中,没有获取所有信息的机制它可能在机器/服务器的任何地方拥有权限。

例如,可以使用 FileInfo 和 DirectoryInfo 类上的 .GetAccessControl() 方法检索文件和目录的权限:

FileInfo info = new FileInfo(@"D:\test.txt");
FileSecurity fs = info.GetAccessControl();

DirectoryInfo dir = new DirectoryInfo(@"D:\test\");
DirectorySecurity ds = dir.GetAccessControl();

我希望这就是你要找的!

于 2012-09-17T13:03:00.657 回答