Búsqueda de sitios web

Una guía para los atributos vinculados de Active Directory


El atributo vinculado de Active Directory es un tipo especial de atributo de Active Directory que se utiliza para describir las relaciones entre objetos. Esta publicación explica qué son los atributos vinculados y cómo funcionan.

¿Qué hace que un atributo sea un atributo vinculado?

Cada atributo en Active Directory está definido por un objeto AttributeSchema en la partición del esquema de Active Directory. Los objetos AttributeSchema que definen atributos vinculados son los únicos objetos de esquema que poseen un atributo LinkID completo. En consecuencia, identificar todos los atributos vinculados en un dominio es tan fácil como usar PowerShell para buscar en el esquema objetos con un LinkID completo, como este:

Get-ADObject -SearchBase (Get-ADRootDSE).SchemaNamingContext -LDAPFilter "(LinkID=*)"

Los atributos vinculados generalmente existen en pares, un vínculo directo y un vínculo posterior, que se define por el valor del atributo LinkID:

  • Enlace directo: el valor de LinkID siempre es un número entero positivo par .
  • Vínculo de retroceso: el valor de LinkID siempre es un entero impar positivo; de hecho, es el valor del LinkID de su enlace directo asociado más uno.

Los atributos con los valores LinkID más pequeños son el atributo Member y el atributo MemberOf, que se utilizan para realizar un seguimiento de la pertenencia a grupos en Active Directory. Entonces, modifiquemos nuestro script de PowerShell para limitar la salida solo a esos dos atributos:

El resultado nos dice varios hechos importantes sobre estos dos atributos:

  • El valor LinkID del atributo Miembro es 2, que es un número entero par. Eso significa que el atributo Miembro es un enlace directo.
  • El valor LinkID del atributo MemberOf es 3, que es un entero impar. Eso significa que el atributo MemberOf es un vínculo de retroceso.
  • El valor LinkID del miembro del vínculo de retroceso es el valor de LinkID del atributo miembro del vínculo directo más uno (3=2 + 1). Eso significa que el atributo Member y el atributo MemberOf son atributos vinculados asociados.

Se puede utilizar un script de PowerShell ligeramente diferente para recuperar directamente el nombre del vínculo directo o de retroceso asociado a un atributo vinculado, aunque no le indica explícitamente si el atributo es un vínculo directo o de retroceso. Debería mirar el valor de LinkID y determinarlo usted mismo.

¿Cómo funcionan los atributos vinculados de Active Directory?

Ahora que hemos establecido qué son los atributos vinculados y cómo identificarlos, es hora de explorar su comportamiento.

Los atributos vinculados almacenan información sobre una relación entre dos objetos, a diferencia de los atributos convencionales de Active Directory, que almacenan información sobre un objeto. Esta diferencia funcional se refleja en el hecho de que Active Directory almacena los valores de los atributos vinculados de forma diferente a como almacena los valores de otros atributos.

Cómo se almacenan los atributos vinculados

Los datos de Active Directory se almacenan en el archivo de base de datos ntds.dit. Los valores de los atributos convencionales se almacenan en una tabla llamada tabla de datos. Los atributos vinculados tienen su propia tabla dedicada, la apropiadamente denominada link_table. Si echamos un vistazo a una instantánea del archivo de base de datos ntds.dit de mi laboratorio, podemos ver cómo Active Directory almacena los valores de atributos vinculados:

Las referencias a objetos en link_table utilizan la etiqueta de nombre distinguido (DNT) de un objeto, que en realidad es la clave principal interna de los registros en la tabla de datos ntds.dit. Esto evita que los cambios en el nombre completo de un objeto requieran una actualización de cualquier entrada de link_table asociada.

La captura de pantalla resalta tres campos importantes en link_table:

  • link_DNT : una referencia a un objeto de enlace directo.
  • backlink_DN: una referencia al objeto de vínculo de retroceso asociado.
  • link_base: una referencia al LinkID del atributo de enlace directo. Este campo utiliza el valor LinkID del enlace directo para identificar la relación que se rastrea entre los dos objetos (aunque, como puede ver en la captura de pantalla, los valores en la tabla son en realidad el valor LinkID dividido por 2).

Consecuencias prácticas de este enfoque para almacenar atributos vinculados

Si bien este enfoque de almacenamiento puede parecer un poco extraño, es un diseño realmente brillante que tiene algunas consecuencias prácticas importantes:

  • Los valores de los enlaces directos se almacenan; se construyen los valores de los vínculos de retroceso. Este es sin duda el concepto más importante que se debe extraer de esta discusión: Los vínculos de retroceso en realidad no almacenan información. Dado que una asociación entre dos objetos son una sola entidad, Active Directory no necesita almacenar más de una copia de una asociación. Cuando se consulta un enlace directo, Active Directory puede simplemente devolver las entradas de link_table donde el DNT del objeto consultado coincide con el valor en el campo link_DNT y el LinkID del enlace directo coincide con el valor en el campo link_base. Cuando se consulta un vínculo de retroceso, Active Directory puede calcular sus valores devolviendo las entradas de link_table donde el DNT del objeto consultado coincide con el valor en el campo backlink_DNT y el LinkID del vínculo directo asociado (calculado restando 1 del LinkID del vínculo de retroceso) coincide. el valor en el campo link_base.
  • Los valores de los enlaces directos se pueden escribir; Los valores de los vínculos de retroceso son de solo lectura. Una vez que sepa que Active Directory almacena solo los valores de los vínculos de avance, esto probablemente parezca obvio. Sin embargo, tiene consecuencias importantes: cuando se modifica un atributo vinculado, Active Directory actualiza el vínculo directo, lo que modifica el objeto que posee ese vínculo. El vínculo de retroceso, que posee un valor construido de solo lectura, nunca se puede modificar, por lo que el objeto que posee el vínculo de retroceso tampoco se modifica.

    Para ilustrar por qué esto es importante, Consideremos agregar un usuario a un grupo. Esta actualización modifica solo el atributo Miembro del grupo; El atributo MemberOf del usuario no se modifica. Dado que el objeto de grupo tuvo un cambio material, los campos de metadatos que reflejan ese cambio (por ejemplo, los atributos "ModifyTimeStamp" y "WhenChanged") se actualizan. Esos mismos campos de metadatos no se actualizan en el objeto de usuario porque, aunque su atributo MemberOf ahora devolverá un valor diferente, el atributo MemberOf en sí no se modificó.
  • Los enlaces directos son obligatorios; Los vínculos de retroceso son opcionales. Algunos artículos sobre atributos vinculados establecen que los atributos vinculados siempre tienen tanto un vínculo directo como un vínculo de retroceso. Si bien esto suele ser cierto, la presencia de un vínculo de retroceso no es estrictamente necesaria. De hecho, si usamos PowerShell para recuperar pares de atributos vinculados, podemos ver que no todos los vínculos directos en mi laboratorio tienen un vínculo posterior asociado:

Beneficios de este enfoque para almacenar atributos vinculados

¿Recuerdas que mencioné que la forma en que se almacenan los atributos vinculados es bastante brillante? El enfoque de Active Directory para almacenar valores de atributos vinculados en realidad produce dos beneficios realmente importantes.

En primer lugar, almacenar sólo los valores de los vínculos directos y utilizarlos para calcular los valores de los vínculos de retroceso asociados reduce el tamaño de la base de datos de Active Directory.

El otro beneficio clave, que es un poco menos obvio, surge del hecho de que Active Directory almacena cada asociación individualmente. Dado que cada una de las asociaciones de un enlace directo tiene su propia entrada en link_table, cada entrada puede mantener su propio Número de secuencia de actualización (USN). Este comportamiento se denomina replicación de valor vinculado (LVR) y permite que Active Directory replique cada asociación individual de forma independiente. Por ejemplo, si agrega un usuario a un grupo con 100 miembros existentes, solo se replica la entrada del usuario recién agregado. Esto puede reducir significativamente el volumen de replicación necesario para propagar cambios a los atributos vinculados.

Dato adicional

Antes de terminar con todo esto, hay otro comportamiento que vale la pena mencionar: Los valores de atributos vinculados se eliminan de los objetos eliminados a menos que la Papelera de reciclaje de AD esté habilitada. Cuando se elimina un objeto que tiene un atributo vinculado, aunque Active Directory mantenga el objeto durante un tiempo como lápida, las entradas link_table asociadas al objeto también se eliminan. Al habilitar la Papelera de reciclaje de Active Directory se cambia este comportamiento y se conservan las entradas de link_table asociadas durante el período de desecho del objeto eliminado.

Conclusión

Debido a que los atributos vinculados de Active Directory se almacenan de manera diferente que otros atributos de Active Directory, se comportan de manera diferente. Esto es especialmente cierto en el caso de los atributos de vínculos de retroceso. Si quitamos solo una cosa de este artículo, es el hecho de que los vínculos de retroceso son atributos construidos: sus valores no se almacenan directamente y, como resultado, realmente no se comportan en absoluto como otros atributos, especialmente con respecto a las actualizaciones. Active Directory generalmente hace un muy buen trabajo al ocultar sus comportamientos de back-end en aras de una experiencia de usuario consistente, pero comprender estas diferencias subyacentes sobre los atributos y sus consecuencias puede evitar problemas.

Artículos relacionados