Active directory Active Directory memberof属性没有';不包含嵌套的安全组

Active directory Active Directory memberof属性没有';不包含嵌套的安全组,active-directory,Active Directory,我正在使用的广告设置包含存储为(多个)安全组成员的用户 我正在使用读取用户memberof属性的软件来计算访问权限 在AD Explorer中,我可以看到用户的memberof属性显示了他们所属的直接安全组,如“Course-English”。它没有显示家长组,嵌套在一起表示“所有学生” 这是有原因的吗?还是有办法确保所有嵌套组都显示在memberof属性中 如果您使用的是.NET 3.5及更高版本,则应检查System.DirectoryServices.AccountManagement(S

我正在使用的广告设置包含存储为(多个)安全组成员的用户

我正在使用读取用户memberof属性的软件来计算访问权限

在AD Explorer中,我可以看到用户的memberof属性显示了他们所属的直接安全组,如“Course-English”。它没有显示家长组,嵌套在一起表示“所有学生”


这是有原因的吗?还是有办法确保所有嵌套组都显示在memberof属性中

如果您使用的是.NET 3.5及更高版本,则应检查
System.DirectoryServices.AccountManagement
(S.DS.AM)命名空间。请在此处阅读所有相关内容:

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

// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName");

if(user != null)
{
   var groups = user.GetAuthorizationGroups();

   // enumerate over groups
   foreach(GroupPrincipal gp in groups)
   {
      // do something here....
   }
}
新的S.DS.AM使得在广告中与用户和群组进行互动变得非常容易


.GetAuthorizationGroups()
方法是我所知道的唯一一个可以进行递归搜索的方法,例如,通过另一个组查找用户所属的组。.NET 3.5版之前的DirectoryServices不能做到这一点-如果需要,您必须完全自己滚动。

可能的原因是
memberOf
属性不包含所有嵌套的组信息,因为该值是在加载属性时计算的,如前所述:

请注意,此属性列出了在其成员属性中包含用户的组,但不包含嵌套前置项的递归列表。例如,如果用户O是组C的成员,并且组B和组B嵌套在组a中,则用户O的memberOf属性将列出组C和组B,而不是组a

此属性不存储,它是一个计算的反向链接属性

因此,为了支持这一点,每次LDAP查询返回
memberOf
属性时,您的DC都将被迫加载所有嵌套的组,这可能会导致大量的额外工作

根据您使用的技术,检查组成员资格几乎肯定有比加载所有组并列出所有组更好的方法。例如,检查用户是否为组成员

但是,对于纯LDAP解决方案,您可以使用\u链中的
LDAP\u匹配\u规则\u
,如图所示(假设您有用户的DN),例如


这将获取管理员所属的所有组。但是,请注意,此查询可能非常慢。为了提高性能,考虑分页结果或将搜索基础限制到只对你感兴趣的组进行检查。

对此非常感谢。这可能是我们需要下去的路线。潜在的性能可能仍然很慢,如前3.5种方法,如多个搜索或LDAPHMatCHION RuleEnIn链,你知道吗?这是有效的。表演是在第二次感谢再次感谢你,这对我的理解和一些有用的东西有很大的帮助。
(member:1.2.840.113556.1.4.1941:=CN=Administrator,OU=Users,DC=fabrikam,DC=com)