Consultar Active Directory mediante Microsoft SQL

Realizaremos consultas sobre Active Directory desde la consola de Microsoft SQL Server
Lo primero que se debe realizar será, desde la consola de Microsoft SQL Server, crear un servidor vinculado que apunte a nuestro Active Directory mediante LDAP


USE [master]
GO 
EXEC master.dbo.sp_addlinkedserver @server = N'ADSI', @srvproduct=N'Active Directory Service Interfaces', @provider=N'ADSDSOObject', @datasrc=N'adsdatasource'
GO
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'ADSI',@useself=N'False',@locallogin=NULL,@rmtuser=N'Dominio\usuario',@rmtpassword='P4ssw0rd'
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'

Desde master lanzamos, por ejemplo un listado de usuarios, de la siguiente forma:

SELECT * FROM OpenQuery (
  ADSI, 
  'SELECT 
                mail,
                displayName,
                sAMAccountName
  FROM  ''LDAP://OU=OUHijo2,OU=OUHijo1,OU=OUPadre,DC=elfoso,DC=com''
  WHERE objectClass =  ''User''
  ') AS tblADSI
WHERE displayName is not null
ORDER BY displayname

La parte interesante es la subselect que realiza la consulta al LDAP.
  • Columnas, se pueden tener todas aquellas que tengan los objetos de AD incluso los extendidos. Tened en cuenta que case sensitive.
  • Cláusula  FROM se puede dirigir a cualquier OU, desde la padre hasta el nivel hijo que deseemos. 
  • Como curiosidad, la representación de salida salida es el inverso al orden de los argumentos en la subselect.

En la SELECT padre tenemos la condición WHERE, en este ejemplo solo he indicado la condición displayName is not null pero podríamos poder tantas como deseemos.

En la url http://www.kouti.com/tables/userattributes.htm, tenemos un listado de todos los atributos de usuario de Active Directory y sus características.

No hay comentarios:

Publicar un comentario