Active Directory中的用户/组权限

本文关键字:权限 用户 Directory Active | 更新日期: 2023-09-27 18:03:58

我在哪里可以找到下面的例子?

  1. 从Active Directory中拉出一个用户。
  2. 获取用户所属的组。
  3. 获取分配给每个组的权限列表。

这似乎是一个简单的任务,但我找不到解决方案。

总体目标是分配自定义权限,并使用它们来控制应用程序中的权限。

Active Directory中的用户/组权限

如果你使用的是。net 3.5及以上版本,你应该检查一下System.DirectoryServices.AccountManagement (S.DS.AM)命名空间。阅读这里的所有内容:

    管理。net Framework 3.5中的目录安全主体
  • System.DirectoryServices.AccountManagement上的MSDN文档

基本上,您可以定义域上下文并轻松地在AD中查找用户和/或组:

// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName");
if(user != null)
{
   // do something here....     
}
// find the group in question
GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "YourGroupNameHere");
// if found....
if (group != null)
{
   // iterate over members
   foreach (Principal p in group.GetMembers())
   {
      Console.WriteLine("{0}: {1}", p.StructuralObjectClass, p.DisplayName);
      // do whatever you need to do to those members
   }
}

新的S.DS.AM使在AD中与用户和组进行交互变得非常容易!

最后一点:权限。它们不存储在活动目录中-因此,您无法从任何AD代码中检索它们。

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

文件和目录的权限可以使用.GetAccessControl()方法对FileInfoDirectoryInfo类进行检索:

FileInfo info = new FileInfo(@"D:'test.txt");
FileSecurity fs = info.GetAccessControl();
DirectoryInfo dir = new DirectoryInfo(@"D:'test'");
DirectorySecurity ds = dir.GetAccessControl();

破译和理解这些是完全不同的故事!