微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么从Active Directory中的“域用户”中更改用户的“主要组”会阻碍用户的递归搜索?

如何解决为什么从Active Directory中的“域用户”中更改用户的“主要组”会阻碍用户的递归搜索?

| 给定以下简单的OU / Group层次结构:
OU=MyApplication
    CN=CompanyClients(objectClass=\"group\"; Members=\"Clients\\Client1\")
    OU=Clients
        CN=Client1(objectClass=\"group\"; Members=\".\\client1-emp1; .\\client1-emp2\")
        CN=client1-Emp1 (objectClass=\"user\"; Primary Group=\"Client1\")
        CN=client1-Emp2 (objectClass=\"user\"; Primary Group=\"Domain Users\")
为什么以下递归搜索仅因为其主组未设置为“域用户”或“域来宾”而忽略了client1-emp1?另外,可以将其他哪些组设置为主组,以使emp1成功包含在搜索中?
using System.DirectoryServices.AccountManagement;

var ctx = new PrincipalContext(ContextType.Domain,\"mydomain.org\");
var group = GroupPrincipal.FindByIdentity(ctx,IdentityType.SamAccountName,\"CompanyClients\");

var results = group.GetMembers(recursive:true);
//results excludes client1-emp1 but includes client1-emp2
foreach (var principal in results)
{
    Debug.WriteLine(\"Principal:\" + principal.SamAccountName);
}
结果:
Principal: client1-emp2
    

解决方法

如果您在Active Directory中检查对象的\“ memberOf \”属性(例如,检查您自己的帐户),则会看到该对象不包含您的主要组(很可能是“域用户”)。通过查看\“ primaryGroupID \”属性(如果您的主要组是域用户),可以看到一个人的主要组,该属性是\“ 513 \”。 同样,如果选中“域用户”的“成员”属性,则不会看到以“域用户”作为主要组的人。 我记得在某处读过,这样做是出于性能方面的原因(当然,现在我找不到这篇文章),因为在某些情况下,拥有太多成员的组会影响性能。
GroupPrincipal
GetMembers
方法可能不会搜索将该组作为主要组的用户(即,它不检查PrimaryGroupId属性),这就是为什么看不到成员之一的原因。 本文介绍了如何为用户解析主要组,我认为您应该能够使用此处说明的概念来解决您的问题:如何使用PrimaryGroupID属性为用户找到主要组     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。