validar usuario query password example conectar con active c# .net active-directory

usuario - query active directory c#



Monitorear la membresía del grupo en Active Directory de manera más eficiente(C#.NET) (3)

Puede configurar la auditoría para el éxito de las modificaciones de la cuenta en el editor de políticas de grupo

A continuación, puede supervisar el registro de seguridad para las entradas y manejar las entradas de registro en las modificaciones de la cuenta.

P.ej

EventLog myLog = new EventLog("Security"); // set event handler myLog.EntryWritten += new EntryWrittenEventHandler(OnEntryWritten); myLog.EnableRaisingEvents = true;

Asegúrese de tener privilegios para acceder al registro de eventos de seguridad http://support.microsoft.com/kb/323076

Tengo una herramienta de sincronización de Active Directory (.NET 2.0 / C #) escrita como un servicio de Windows en la que he estado trabajando durante un tiempo y recientemente me han encomendado la tarea de agregar eventos basados ​​en los cambios en la membresía grupal. El escenario básico es que los usuarios estén sincronizados con una base de datos de seguridad y, cuando la pertenencia al grupo cambie, los usuarios necesiten que se modifiquen sus derechos de acceso (es decir, si ahora soy miembro del "personal de TI", debería recibir automáticamente acceso al sala de servidores, si me retiran de ese grupo, automáticamente debería perder el acceso a la sala de servidores).

El problema es que al hacer una sincronización de directorios contra grupos, recibe nuevamente el grupo al que se le agregó / quitó un miembro, y desde allí cuando toma la lista de miembros, obtiene la lista de todos los miembros de ese grupo, no solo los miembros que han sido agregados o eliminados. Esto me lleva a un gran problema de eficiencia, ya que para saber si un usuario ha sido agregado o eliminado tendré que mantener localmente una lista de cada grupo y todos los miembros y compararlo con la lista actual para ver quién ha sido agregado (no en la lista local), y quién ha sido eliminado (en la lista local, no en la lista de miembros actual).

Estoy debatiendo simplemente almacenar los detalles de membresía del grupo en un DataSet en la memoria y escribir en el disco cada vez que procesé nuevos cambios de membresía. De esta forma, si el servicio se detiene / se bloquea o la máquina se reinicia, aún puedo acceder al estado actual del Directorio Activo dentro de la base de datos de seguridad comparando la última información del disco con la de la lista actual de miembros del grupo. Sin embargo, esto parece terriblemente ineficiente: pasar por cada miembro del grupo para compararlo con lo que está en el conjunto de datos y luego escribir los cambios en el disco cada vez que hay cambios en la lista.

¿Alguien ha tratado con este escenario antes? ¿Hay alguna forma que no haya encontrado para recuperar solo un delta de miembros del grupo? ¿Qué harías en esta situación para asegurarte de que nunca te pierdas ningún cambio mientras tomas el golpe de rendimiento más pequeño posible?

Editar: la AD podría contener 500 usuarios, podría contener 200,000 usuarios. Depende del cliente y además de cuántos grupos es miembro el usuario promedio.


Yo diría que depende de la cantidad de objetos de directorio activo que necesita para realizar un seguimiento. Si se trata de un número pequeño (menos de 1000 usuarios), probablemente pueda serializar los datos de su estado en el disco con un pequeño golpe de rendimiento notable. Si está tratando con una gran cantidad de objetos, podría ser más eficiente crear un esquema de persistencia simple en algo como SQL Express y usarlo.


¿Sabía que hay productos que lo ayudan con la sincronización de directorios y el aprovisionamiento de usuarios (google esos términos)? No inventado aquí y todo eso, y es posible que tenga que justificar la inversión en el clima actual, pero desarrollar y mantener el código para el cual ya existe una solución comercial no es, digamos, siempre la forma más rentable en el largo plazo. correr.

No todos los eventos / aprovisionamiento de soporte, pero admiten cambios de seguimiento y distribución: no es gran cosa crear soluciones de eventos además de esas capacidades.

Microsoft tiene el Servidor de Integración de Identidad (MISS) que está siendo reempaquetado como parte de Identity Lifecycle Manager . Fue construido originalmente en un producto más general de gestión de meta / datos maestros, pero es viable. IBM tiene el integrador de directorio de Tivoli (¡pero debe mantenerse actualizado con los cambios de nombre bi-anuales!). Oracle tiene un Oracle Identity Manager y Sun un Identity Manager . La mayoría de estos son productos líderes comprados por los principales jugadores para llenar un vacío en sus carteras.

Por supuesto, estos son productos de clase empresarial, lo que significa grandes y costosos, pero generalmente bastante seguros para el futuro y extensibles. Si no necesita toda su fuerza (¡aún!), Tendrá que considerar almacenar una copia para usted mismo. En ese caso, ¿ha considerado almacenar su réplica del último árbol AD ​​conocido utilizando AD LDS (anteriormente AD / AM)? No está en un formato óptimo para comparar diferencias, pero una base de datos de directorio se escalará razonablemente bien, incluso el tipo de peso ligero.