Active Directory中的用户/组权限
我在哪里可以找到执行以下操作的示例?
- 从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中与用户和群组玩起来非常容易!
最后一点:权限。 这些不存储在Active Directory中 – 因此,您无法从任何AD代码中检索它们。
权限存储在各个文件系统项目上,例如文件和/或目录 – 或其他对象(如注册表项等)。 当您拥有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();
解读和理解这些完全是一个完全不同的故事!
- 如何从Active Directory获取用户的电子邮件地址?
- 在.NET Web应用程序中获取登录用户的UPN或电子邮件
- LdapConnection与PrincipalContext
- Active Directory和PrincipalPermission
- System.DirectoryServices.DirectoryServicesCOMException(0x800700EA):有更多数据可用
- Active Directory中联机的计算机列表
- LDAPS连接出现未知错误(0x80005000)
- 从C#访问AD时“从服务器返回引用”exception
- 根据本地安全策略validation新的AD密码?