gpt4 book ai didi

c# - 为什么在 Active Directory 中将用户的 "Primary Group"从 "Domain Users"更改为阻碍对用户的递归搜索?

转载 作者:行者123 更新时间:2023-11-30 12:35:09 25 4
gpt4 key购买 nike

给定以下简单的 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,仅仅因为其主要组未设置为“Domain Users”或“Domain Guests”?另外,还有哪些组可以设置为主组,这样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”。

同样,如果您检查“域用户”的“成员”属性,您将不会看到将域用户作为主要组的人。

我记得在某处读到过这样做是出于性能原因(当然现在我找不到这篇文章),因为在某些情况下,拥有太多成员的组会影响性能。

GroupPrincipalGetMembers 方法可能不会搜索将组作为主要组的用户(即它不会检查 PrimaryGroupId 属性),这就是为什么你没有看到任何成员。

本文解释了如何为用户解析主要组,我认为您应该能够使用此处解释的概念来解决您的问题:How to use the PrimaryGroupID attribute to find the primary group for a user

关于c# - 为什么在 Active Directory 中将用户的 "Primary Group"从 "Domain Users"更改为阻碍对用户的递归搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6133953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com