【问题标题】:Missing Active Directory groups when DirectorySearcher or SearchRequest is used使用 DirectorySearcher 或 SearchRequest 时缺少 Active Directory 组
【发布时间】:2017-04-15 20:24:39
【问题描述】:

我想列出域中的所有组。如果我使用 DirectorySearcher 或 LdapConnection 和 SearchRequest 对象,则返回列表中缺少某些组。但是如果我从目录的根目录开始遍历所有具有 DirectoryEntry 类的树,我可以得到这些组。

我使用 AD Explorer 工具检查了返回组和丢失组的属性,但我看不出它们之间有任何区别。我需要使用 LdapConnection + SearchRequest,因为如果我需要使用 LDAP+SSL,DirectoryEntry 不允许我管理证书问题。

有人遇到过同样的问题吗?可能有什么问题?

搜索操作示例代码;

LdapConnection _connection = new LdapConnection(new LdapDirectoryIdentifier("MTS", 389));
_connection.AuthType = AuthType.Basic;
_connection.Credential = new NetworkCredential("MTS\user1", "test123");

string _target = "dc=MTS,dc=com";

SearchRequest _request = new SearchRequest(_target, "(&(objectCategory=Group)(objectClass=group))", System.DirectoryServices.Protocols.SearchScope.Subtree, new string[] { "sAMAccountName" });

var _response = (SearchResponse)_connection.SendRequest(_request);

List<string> _namelist = new List<string>(16);

foreach (SearchResultEntry entry in _response.Entries)
{
      if (entry.Attributes["sAMAccountName"].Count > 0)
        _namelist.Add(entry.Attributes["sAMAccountName"][0].ToString());
}

编辑 1

如果我更改搜索过滤器并仅搜索丢失的组,它会找到该组。以下搜索过滤器起作用并获取组,

"(&(sAMAccountName=testGroup)(objectCategory=Group)(objectClass=group))"

可能存在限制,但我将 Sizelimit 和 TimeLimit 设置得如此之高,搜索永远不会返回有关任何限制的错误。

【问题讨论】:

  • 缺失的组是否总是相同的类型(本地、全局、通用)?您是否检查过他们实际上有 (objectCategory=Group)(objectClass=group)
  • 列出和缺失的组是同一类型,它们实际上是“(objectCategory=Group)(objectClass=group)”。奇怪的是,如果我使用 DirectoryEntry 类从上到下遍历目录结构,我可以检索它们。
  • 返回条目的总数是多少?根据我的经验,目录控制器可能会限制搜索响应计数(取决于操作系统、域和林功能级别)。尝试在 SearchRequest 中使用 PageResultRequestControl。
  • 是的,这就是我得到的结果少于预期的原因。即使我将 SizeLimit 设置得太高,服务器端也有一个我无法更改的 Max Result 限制。仅当域太大时才会出现此问题。由于我无法操纵客户端域控制器的大小限制,我通过使用分页搜索控件解决了它。你可以写一个关于这个解决方案的答案。谢谢,

标签: c# active-directory ldap


【解决方案1】:

我遇到了同样的问题,没有超时或错误,但结果不完整。 我会试试 PageResultRequestControl,谢谢。

【讨论】:

  • 就我而言,似乎服务器端存在某种超时。我的目标广告很大,所以我的解决方法是首先进行 ldap 查询以获取所有 OU。然后为每个 OU 执行 ldap 查询,s 范围为 Onelevel,adpath 等于 OU 的 CN。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多