Sondear los cambios mediante el control DirSync
El control de sincronización de directorios de Active Directory (DirSync) es una extensión de servidor LDAP que permite a una aplicación buscar una partición de directorio para los objetos que han cambiado desde un estado anterior.
Use el control DirSync a través de ADSI especificando la preferencia de búsqueda ADS_SEARCHPREF_DIRSYNC al usar IDirectorySearch. Para obtener más información y un ejemplo de código, vea Ejemplo de código con ADS_SEARCHPREF_DIRSYNC. También puede realizar una búsqueda de DirSync mediante la API LDAP. A continuación se describe la implementación adsi, la mayoría de las cuales también se aplica al uso de LDAP directamente, excepto como se describe al final de este tema.
Al realizar una búsqueda de DirSync, se pasa un elemento de datos (cookie) específico del proveedor que identifica el estado del directorio en el momento de la búsqueda anterior de DirSync. Para la primera búsqueda, se pasa una cookie nula y la búsqueda devuelve todos los objetos que coinciden con el filtro. La búsqueda también devuelve una cookie válida. Almacene la cookie en el mismo almacenamiento que está sincronizando con el servidor de Active Directory. En las búsquedas posteriores, obtenga la cookie del almacenamiento y pásela con la solicitud de búsqueda. Los resultados de la búsqueda ahora incluyen solo los objetos y atributos que han cambiado desde el estado anterior identificado por la cookie. La búsqueda también devuelve una nueva cookie que se almacenará para la siguiente búsqueda.
En la tabla siguiente se enumeran los parámetros de búsqueda que puede especificar la solicitud de búsqueda de cliente.
Parámetro | Descripción |
---|---|
Base de la búsqueda | La base de una búsqueda de DirSync debe ser la raíz de una partición de directorio, que puede ser una partición de dominio, la partición de configuración o la partición de esquema. |
Ámbito | El ámbito de una búsqueda de DirSync debe ser ADS_SCOPE_SUBTREE, es decir, todo el subárbol de la partición. Tenga en cuenta que para una búsqueda de una partición de dominio, el subárbol incluye los encabezados, pero no el contenido, de las particiones de configuración y esquema. Para sondear los cambios en un ámbito más pequeño, use la técnica USNChanged en lugar de DirSync. |
Filtrar | Puede especificar cualquier filtro de búsqueda válido. Para una búsqueda inicial con una cookie nula, los resultados incluyen todos los objetos que coinciden con el filtro. En las búsquedas posteriores con una cookie válida, los resultados de la búsqueda incluyen datos solo para los objetos que coinciden con el filtro y han cambiado desde el estado indicado por la cookie. Para obtener más información sobre los filtros de búsqueda, consulte Creación de un filtro de consulta. |
Atributos | Puede especificar una lista de atributos que se devolverán cuando se produzca un cambio. Para cada objeto, los resultados iniciales incluyen todos los atributos solicitados establecidos en el objeto . Los resultados de búsqueda posteriores incluyen solo los atributos especificados que han cambiado. Los atributos sin cambios no se incluyen en los resultados de la búsqueda. En la implementación de ADSI, los resultados de la búsqueda siempre incluyen objectGUID e instanceType de cada objeto. Además, la lista de atributos especificada actúa como filtro adicional: los resultados de búsqueda iniciales incluyen solo los objetos que tienen al menos uno de los atributos especificados establecidos; Las búsquedas posteriores incluyen solo objetos en los que uno o varios de los atributos han cambiado (valores agregados o eliminados). |
Además, tenga en cuenta que:
En el caso de las búsquedas incrementales, el procedimiento recomendado es enlazar al mismo controlador de dominio (DC) usado en la búsqueda anterior, es decir, el controlador de dominio que generó la cookie. Si el mismo controlador de dominio no está disponible, espere hasta que sea o enlace a un nuevo controlador de dominio y realice una sincronización completa. Almacene el nombre DNS del controlador de dominio en el almacenamiento secundario con la cookie.
Puede pasar una cookie generada por un controlador de dominio a otro controlador de dominio que hospeda una réplica de la misma partición de directorio. No hay ninguna posibilidad de que un cliente pierda los cambios mediante el uso de una cookie de un controlador de dominio en otro controlador de dominio. Sin embargo, es posible que los resultados de búsqueda del nuevo controlador de dominio incluyan los cambios notificados por el controlador de dominio antiguo; en algunos casos, el nuevo controlador de dominio puede devolver todos los objetos y atributos, como con una sincronización completa. El cliente solo debe hacer que su base de datos sea coherente con los resultados de búsqueda notificados para cualquier llamada a DirSync determinada, es decir, controlar todos los resultados incrementales como si fueran el estado más reciente. No importa si ha visto el cambio antes o incluso vuelve a un estado anterior porque las sincronizaciones incrementales repetidas convergen en la coherencia.
También es posible que el otro controlador de dominio rechace la cookie devuelta del controlador de dominio original. La búsqueda genera un error LDAP en el servidor como "0000203D: LdapErr: DSID-xxxxxxxx, comentario: Control de procesamiento de errores, datos 0" y la aplicación cliente puede generar un error como "System.DirectoryServices.Protocols.DirectoryOperationException: error de protocolo". Esto puede ocurrir, por ejemplo, cuando la cookie es anterior y se espera que el contenido interno de la cookie sea diferente cuando un servidor LDAP procesa una versión diferente de Windows. La cookie es una estructura opaca y no se garantiza que sea estructuralmente coherente entre todas las versiones del sistema operativo Windows. La aplicación cliente debe controlar este caso y reintentar con una sincronización completa si se encuentra este error.
Cuando se cambia el nombre o se mueve un objeto, sus objetos secundarios, si los hay, no se incluyen en los resultados de la búsqueda, aunque los nombres distintivos de los objetos secundarios hayan cambiado. De forma similar, cuando se modifica una ACE heredera en un descriptor de seguridad de objeto, los objetos secundarios del objeto no se incluyen en los resultados de la búsqueda, aunque los descriptores de seguridad de los objetos secundarios hayan cambiado.
Use el atributo objectGUID para identificar los objetos con seguimiento. El objectGUID de cada objeto permanece sin cambios independientemente de dónde se mueva el objeto dentro del bosque.
Tenga en cuenta que los resultados de búsqueda de una búsqueda DirSync indican el estado de los objetos en una réplica de la partición de directorio en el momento de la búsqueda. Esto significa que los cambios realizados en otros controladores de dominio no se incluirán si no se han replicado en el controlador de dominio de destino. También significa que los atributos de un objeto pueden haber cambiado varias veces desde la búsqueda anterior de DirSync, pero la búsqueda mostrará solo el estado final, no la secuencia de cambios.
En la implementación de ADSI, la aplicación debe controlar la cookie como opaca y no realizar ninguna suposición sobre su organización interna o valor.
Tenga en cuenta que el cliente almacena la cookie, la longitud de la cookie y el nombre DNS del controlador de dominio en el mismo almacenamiento que contiene los datos del objeto sincronizado. Esto garantiza que la cookie y otros parámetros permanezcan sincronizados con los datos del objeto si el almacenamiento se restaura alguna vez a partir de una copia de seguridad.
Para recuperar el atributo parentGUID , que se construye para el control DirSync, también es necesario solicitar el atributo name .
Para usar el control DirSync, el autor de la llamada debe tener asignado el derecho "directory get changes" en la raíz de la partición que se está supervisando. De forma predeterminada, este derecho se asigna a las cuentas Administrador y LocalSystem en controladores de dominio. El autor de la llamada también debe tener el derecho de acceso de control extendido DS-Replication-Get-Changes . Para obtener más información sobre cómo implementar un mecanismo de seguimiento de cambios para las aplicaciones que deben ejecutarse en una cuenta que no tiene este derecho, consulte Sondeo de cambios mediante USNChanged. Para obtener más información sobre los privilegios, consulte Privilegios.
Recuperar objetos eliminados con una búsqueda de DirSync
Los resultados de búsqueda ADS_SEARCHPREF_DIRSYNC incluyen automáticamente objetos eliminados (lápidas) que coinciden con el filtro de búsqueda especificado. Sin embargo, un filtro de búsqueda que coincidirá con un objeto cuando esté activo puede no coincidir con el objeto después de eliminarlo. Esto se debe a que los lápidas conservan solo un subconjunto de los atributos presentes en el objeto original. Por ejemplo, normalmente usaría el siguiente filtro para objetos de usuario.
(&(objectClass=user)(objectCategory=person))
El atributo objectCategory se quita cuando se elimina un objeto, por lo que el filtro anterior no coincidiría con ningún objeto tombstone. Por el contrario, el atributo objectClass se conserva en objetos tombstone, por lo que un filtro de "(objectClass=user)" coincidiría con los objetos de usuario eliminados.
La lista de atributos que especifique con una búsqueda DirSync también actúa como filtro; Los resultados de la búsqueda incluyen solo objetos en los que uno o varios de los atributos especificados han cambiado desde la búsqueda anterior de DirSync. Si la lista de atributos no incluye ningún atributo que se conserve en las lápidas, los resultados de la búsqueda no incluirán los lápidas. Para controlar esto, solicite todos los atributos especificando una lista de atributos NULL; o puede solicitar el atributo isDeleted , establecido en TRUE en todas las lápidas. Los atributos tombstone tienen el 0x8 bit establecido en el atributo searchFlags de la definición attributeSchema .
Para obtener más información, vea Recuperar objetos eliminados.
Implementación LDAP del control DirSync
También puede realizar una búsqueda de DirSync mediante la API LDAP con el control LDAP_SERVER_DIRSYNC_OID . Si usa la API LDAP, especifique también los controles de LDAP_SERVER_EXTENDED_DN_OID y LDAP_SERVER_SHOW_DELETED_OID . El control LDAP_SERVER_EXTENDED_DN_OID hace que una búsqueda LDAP devuelva una forma extendida del nombre distintivo que incluye objectGUID y objectSID para objetos de entidad de seguridad como usuarios, grupos y equipos. El control LDAP_SERVER_SHOW_DELETED_OID hace que los resultados de la búsqueda incluyan datos para los objetos eliminados. Tenga en cuenta que estos controles se incluyen automáticamente en la implementación adsi.