Cómo hacer consultas de SQL Server a Active Directory

Como si no tuviera nada útil que hacer, voy a dedicarme ahora a mostrar cómo guardar y trabajar con SQL Server y Active Directory.
Active Directory es una base de datos del Sistema operativo Windows que guarda información corporativa de usuarios, teléfonos, direcciones, impresoras, carpetas compartidas, etc.

En muchos casos, la gente desea importar la información de Active Directory en bases de datos. En este caso, les voy a enseñar cómo hacer consultas de SQL Server a Active Directory.

El primer paso, es crear un linked server. Este es un link que hace SQL Server con otras bases de datos. Con SQL Server puedo hacer consultas a Access, Oracle, MySQL, etc. En este caso desde SQL Server voy a hacer es conectarme y crearme un link de SQL Server a Active Directory.

En SQL Server Management Studio ejecuto las siguientes sentencias:

EXEC sp_addlinkedserver 'ADSI', 'Active Directory Services 2.5',
'ADSDSOObject', 'adsdatasource'
GO

He creado un linked server llamado ADSI que se conecta a Active Directory.
El siguiente paso es habilitar la opción para hacer consultas distribuidas. Para eso hay que habilitar las opciones avanzadas primero y luego habilitar la opción indicada:

sp_configure 'show advanced options', 1
reconfigure with override


sp_configure 'Ad Hoc Distributed Queries', 1
reconfigure


Ahora vamos a mostrar a los usuarios del contenedor Users de Active Directory, del dominio contoso.com

SELECT [Name], SN [Last Name], ST State
FROM OPENQUERY( ADSI,
   'SELECT Name, SN, ST
   FROM ''LDAP://ADSISrv/ CN=Users,DC=contoso,DC=com''
   WHERE objectCategory = ''Person'' AND
      objectClass = ''contact''')

SELECT * FROM OpenQuery(ADSI, 'SELECT * FROM ''LDAP://OU=marketing,DC=contoso,DC=com'' WHERE objectCategory=''user'' ')

En este siguiente ejemplo estoy creando una tabla llamada ListaUsuarios y le estoy pasando los datos de Active Directory.

SELECT *
INTO ListaUsuarios
FROM OpenQuery(ADSI, 'SELECT name,
mail, logonHours,pwdLastSet,creationTime,
forceLogoff,lockoutDuration,
lockOutObservationWindow,displayName,
userPrincipalName
FROM ''LDAP://OU=Marketing,DC=contoso,DC=com'' WHERE objectCategory=''user'' ')


Entendiste el artículo ?, te perdiste ?, esto era chino ?, 不明白嗎?,muy fácil ?, escribe tus comentarios y dudas a este blog.

Comentarios

  1. Saludos

    Muy util la informacion pero si quisiera hacer lo mismo pero con MySQL en vez de SQL Server como debo hacerlo?

    Gracias

    ResponderEliminar
  2. Lo mío es SQL Server no MySQL. Tal vez usando algún programa en c# pueda lograrlo.

    ResponderEliminar
  3. HOLA QUIERO HACER CONSULTAS DE SQL SERVER 2008 R2 A ACTIVE DIRECTORY
    Y USAR LOS DATOS PARA AGREGARLOS EN UN DOCUMENTO AUTOMATIZADO
    QUE DATOS SE CAMBIAN CON TU MÉTODO PARA REALIZAR MI CONEXION?

    ResponderEliminar
  4. LDAP://OU=marketing,DC=contoso,DC=com'
    En este ejemplo, el dominio se llama contoso.com
    Y la unidad organizacional marketing.
    Esos datos cambialos a tus necesidades.

    ResponderEliminar
  5. EXEC sp_addlinkedserver 'ADSI', 'Active Directory Services 2.5',
    'ADSDSOObject', 'adsdatasource' que se refiere con esos datos ?
    tengo mi AD ws2008 r2 y quiero pasar mis clientes a una BD sql 2008 PARA ahi hacer las consultas. agradeceria tu ayuda

    ResponderEliminar
  6. Debería funcionarle la sentencia tal y como esta, sin cambiarle nada. Tiene algún problema ?

    EXEC sp_addlinkedserver 'ADSI', 'Active Directory Services 2.5',
    'ADSDSOObject', 'adsdatasource'
    GO

    ResponderEliminar
  7. Buenas Noches, quisiera saber si con active directory se puede restringir acceso de datos en tablas por perfil de usuarios.
    Gracias de antemano

    ResponderEliminar
  8. Juan Quezada, no se si entendí bien. Quieres restringir acceso a tablas SQL Server importadas de active directory ?

    ResponderEliminar
  9. ¡Muchas gracias, me ha servido!

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Detectar el usuario de Windows utilizando C#

La página oficial del dólar blue en Bolivia

Lo nuevo de SQL Server 2008 respecto a SQL Server 2005