Hace un par de semanas necesitamos obtener datos de usuarios, y la mejor opción fue consultar el Active Directory directamente desde un SQL Server. Puede ser una buena solución en algunos casos, teniendo en cuenta que un AD bien mantenido siempre es nuestra mejor fuente. El Active Directory de Microsoft es una base de datos segura con muchos campos para guardar la información de usuarios y empleados, y además nos da otros datos importantes, como la fecha de creación, el último inicio de sesión o la caducidad de la cuenta.
En este primer ejemplo obtendremos el nombre completo, la dirección de correo y el teléfono de todos los usuarios.
Primero creamos un vínculo entre nuestro SQL Server y el Active Directory. Se conoce como ADSI y es la forma correcta de conectar los dos sistemas.
Tenéis que cambiar los valores de @rmtuser y @rmtpassword por las credenciales de un usuario con permiso para leer el AD.
USE [master] GO EXEC master.dbo.sp_addlinkedserver @server = N'ADSI', @srvproduct=N'Active Directory Service Interfaces', @provider=N'ADSDSOObject', @datasrc=N'adsdatasource' EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'ADSI',@useself=N'False',@locallogin=NULL,@rmtuser=N'DOMAIN\USER',@rmtpassword='*********' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'collation compatible', @optvalue=N'false' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'data access', @optvalue=N'true' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'dist', @optvalue=N'false' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'pub', @optvalue=N'false' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'rpc', @optvalue=N'false' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'rpc out', @optvalue=N'false' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'sub', @optvalue=N'false' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'connect timeout', @optvalue=N'0' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'collation name', @optvalue=null GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'lazy schema validation', @optvalue=N'false' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'query timeout', @optvalue=N'0' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'use remote collation', @optvalue=N'true' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'remote proc transaction promotion', @optvalue=N'true' GO
A partir de aquí ya podemos consultar el AD directamente. Recordad cambiar la ruta LDAP por la de vuestra unidad organizativa:
SELECT TOP (100) PERCENT displayName, mail, telephoneNumber, mobile FROM OPENQUERY(ADSI, 'SELECT displayName, mail, telephoneNumber, mobile FROM ''LDAP://YouDomainName/OU=OneOfYourOrganizationUnit,DC=YourDomain,DC=com'' WHERE objectClass = ''User'' ') AS tblADSI ORDER BY displayName
Si queréis saber más, en la web de Richard Mueller hay una hoja de Excel con las propiedades del AD y su correspondencia con la herramienta «Usuarios y equipos de Active Directory».
Nota: ADSI devuelve como máximo 1.000 objetos por consulta. Si tenéis más, tendréis que filtrar por unidades organizativas o por letra inicial.
Espero que os sea útil.
Traducción hecha con ayuda de IA a partir del artículo original.