Windows Server 2008 和更新的域控制器在 LDAP 响应中仅返回 5000 个值

本文提供了一个解决方案,其中 Windows Server 2008 R2 或更高版本的域控制器仅返回 5000 个 LDAP 响应值的问题。

原始 KB 数: 2009267

现象

当将查询发送到 Windows Server 2008 或 Windows Server 2008 R2 域控制器时,LDAP 应用程序可能会返回的信息少于发送到 Windows Server 2003 域控制器的时间。 查询结果可能显示为截断或不完整。 在某些情况下,可能无法获得任何结果。 例如,如果 LDAP 应用程序查询组的成员,则 Windows Server 2008 R2 或 Windows Server 2008 域控制器仅返回 5000 个成员,而 Windows Server 2003 域控制器返回更多成员。 在这两种情况下,你都可以在 LDAP 应用程序所需的 NTDSUTIL 中实现相同的扩展 LDAP 策略设置。 有关查看 LDAP 策略设置的详细信息,请单击以下文章编号以查看Microsoft知识库中的文章:

315071如何使用 Ntdsutil.exe 在 Active Directory 中查看和设置 LDAP 策略

示例输出:

ldap 策略:显示值

策略当前(新)

MaxPoolThreads 4
MaxDatagramRecv 4096
MaxReceiveBuffer 10485760
InitRecvTimeout 120
MaxConnections 5000
MaxConnIdleTime 900
MaxPageSize 50000
MaxQueryDuration 120
MaxTempTableSize 10000
MaxResultSetSize 262144
MinResultSets 0
MaxResultSetsPerConn 0
MaxNotificationPerConn 5
MaxValRange 25000

注意

在两个域控制器上,MaxPageSize 设置为 50000(默认值 1000),MaxValRange 设置为 25000(默认值 1500)。

原因

Windows Server 2008 R2 和 Windows Server 2008 中引入了内部 LDAP 限制,以防止域控制器过载。 当策略值应更高时,这些限制将覆盖 LDAP 策略设置。

LDAP 设置 最大值(硬编码)
MaxReceiveBuffer 20971520
MaxPageSize 20000
MaxQueryDuration 1200
MaxTempTableSize 100000
MaxValRange 5000

因此,上述 LDAP 策略的有效设置是 Windows Server 2003 域控制器上配置的 MaxPageSize=50000 和 MaxValRange=25000,但在 Windows Server 2008 R2 或 Windows Server 2008 域控制器上,硬编码的限制决定了 MaxPageSize=20000 和 MaxValRange=5000。
MaxValRange 会影响为查询返回的属性数。 如果对具有 5000 多个成员的组对象的多值属性成员执行 LDAP 查询,则 Windows Server 2008 R2 或 Windows Server 2008 域控制器将仅返回其中 5000 个成员。

解决方法

Windows Server 2008 R2 和 Windows Server 2008 引入的新最大限制尝试强制实施应用程序应采用的策略的消息。 应相应地调整 LDAP 应用程序。 对于 MaxValRange 限制,可以考虑以下 MSDN 信息和使用范围查询的示例:属性值的范围检索 https://msdn.microsoft.com/library/cc223242(PROT.10).aspx
下面的代码示例使用 ranging 通过 IDirectoryObject 接口检索组的成员:使用 IDirectoryObject 进行 Ranging 的示例代码 https://msdn.microsoft.com/library/aa705923(VS.85).aspx
下面的代码示例使用 Ranging 通过 IDirectorySearch 接口检索组的成员:使用 IDirectorySearch 进行 Ranging 的示例代码 https://msdn.microsoft.com/library/aa705924(VS.85).aspx
对于 MaxPageSize,建议使用 MSDN 上概述的分页查询,如下所示:分页搜索结果 https://msdn.microsoft.com/library/aa367011(VS.85).aspx
ldap_create_page_control 函数 https://msdn.microsoft.com/library/aa366547(VS.85).aspx
有一种方法可以替代这些限制,但我们建议与Microsoft客户支持讨论要求,以确定修改策略是否是正确的方法。

详细信息

有关 LDAP 策略的详细信息,请访问 LDAP 策略 https://msdn.microsoft.com/library/cc223376(PROT.10).aspx