本文提供了一个解决方案,其中 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