¿Por qué una consulta LDAP no devuelve todos los resultados y qué tiene que ver el valor MaxPageSize en ello?

Hola a todos. Soy Paula, del equipo de Directorio Activo. Hoy vamos a tratar un tema por el que nos preguntan en Soporte.

A veces, cuando se realizan consultas LDAP a Directorio Activo (utilizando alguna herramienta o programa a medida), no se devuelven todos los resultados que esperamos. Podemos, por ejemplo, solicitar todos los usuarios de una determinada Unidad Organizativa en la que sabemos que hay 3000 usuarios para luego realizar algunas modificaciones sobre ellos. Sin embargo, al ejecutar la consulta LDAP, AD sólo nos devuelve 1000 usuarios, con lo cual la búsqueda no nos sirve...

Este comportamiento se debe a que Directorio Activo devuelve por defecto un máximo número de objetos (1000) en una única búsqueda, aunque los objetos que cumplan los parámetros de búsqueda sean más de ese número por defecto. Este límite viene dado por el valor MaxPageSize de la política LDAP en Directorio Activo.

El valor puede ser modificado y adaptado a las necesidades concretas que tengamos. Para modificar dicho valor es necesario realizar la operación con un usuario con credenciales de Enterprise Admin.

No se recomienda cambiar su valor para recibir un mayor número de objetos en una única consulta LDAP, sino realizar búsquedas paginadas en el Directorio Activo. De esta manera se dividirá la búsqueda en varias búsquedas “más pequeñas” que cumplirán con el límite máximo establecido para cada una de ellas.

¿Por qué no se recomienda cambiar el valor de MaxPageSize?

Porque su modificación puede producir efectos negativos sobre el rendimiento de los DCs y el tráfico generado en la red.

Se puede encontrar más información sobre el valor MaxPageSize y cómo consultarlo y/o modificarlo con ntdsutil.exe en el siguiente enlace:

315071 How to view and set LDAP policy in Active Directory by using Ntdsutil.exe

“MaxPageSize - This value controls the maximum number of objects that are returned in a single search result, independent of how large each returned object is. To perform a search where the result might exceed this number of objects, the client must specify the paged search control. This is to group the returned results in groups that are no larger than the MaxPageSize value. To summarize, MaxPageSize controls the number of objects that are returned in a single search result.
Default value: 1,000”

Si se modifican los límites establecidos por defecto existe un problema potencial de rendimiento. Estos límites han sido probados y se seleccionaron por considerarse óptimos o recomendables. Para entornos específicos pueden ser modificados pero siempre teniendo en cuenta que pueden suponer un problema de rendimiento en el futuro. También hay que recordar que el valor se cambia a nivel general en la política LDAP de AD, por lo que afectará a todos los DCs.

¿Cómo resolver la situación sin modificar el valor de MaxPageSize?

La recomendación para realizar consultas LDAP es realizar dichas consultas de manera paginada (los diferentes lenguajes de programación a través de APIs para LDAP ofrecen mecanismos para llevar este tipo de búsquedas a cabo), con lo que se recibirían los datos de 1000 en 1000 (registros), en lugar de modificar el tamaño de la página que nos devuelve Directorio Activo. De hecho, aunque aumentemos el tamaño del valor MaxPageSize, es posible que tampoco sea suficiente y la búsqueda no devuelva todos los resultados esperados (el número de objetos puede crecer en el tiempo y superar el nuevo límite de MaxPageSize).

Se puede encontrar más información sobre las diferentes políticas LDAP, incluyendo MaxPageSize en el siguiente enlace:

3.1.1.3.4.6 LDAP Policies

Como ya se ha comentado, las políticas LDAP proporcionan límites operacionales para consultas/operaciones LDAP y deben ser configuradas de tal manera que garanticen un nivel de servicio aceptable sin impactar al rendimiento de los DCs y evitando así también ataques de denegación de servicio.

Información específica sobre las políticas LDAP en Windows Server 2008:

LDAP policies

“To ensure that domain controllers can support service level guarantees, you can specify operational limits for a number of Lightweight Directory Access Protocol (LDAP) operations. These limits prevent specific operations from adversely impacting the performance of the server and also make the server resilient to denial of service attacks.”

Más información sobre los límites administrativos de LDAP para AD en la información sobre la herramienta Microsoft Exchange Server Analyzer Tool que analiza configuraciones erróneas entre otros:

Microsoft Exchange Server Analyzer Tool – Active Directory settings
MaxPageSize is set too high

The Microsoft® Exchange Server Analyzer Tool queries the Active Directory® directory service to determine the setting for the MaxPageSize value for the LDAPAdminLimits attribute of the Default Query Policy object in the Query-Policies container. If the Exchange Server Analyzer determines that the value for MaxPageSize is greater than 2,500, an error is displayed.

The Lightweight Directory Access Protocol (LDAP) administrative limits balance Active Directory operational capabilities and performance. These limits prevent specific operations from adversely affecting the performance of the server. The limits also make the server resilient to denial of service attacks. Increasing this setting beyond its default value could have an adverse impact on your Active Directory infrastructure.

Información adicional sobre las búsquedas paginadas:

Espero que la información os resulte útil a la hora de realizar consultas LDAP en vuestro directorio.

Paula Tomás Galed