, ,

Consultar l’Active Directory des de SQL Server

·

Consultar l’Active Directory des de SQL Server

Fa un parell de setmanes vam necessitar obtenir dades d’usuaris, i la millor opció va ser consultar l’Active Directory directament des d’un SQL Server. Pot ser una bona solució en alguns casos, tenint en compte que un AD ben mantingut sempre és la nostra millor font. L’Active Directory de Microsoft és una base de dades segura amb molts camps per guardar-hi la informació d’usuaris i empleats, i a més ens dona altres dades importants, com la data de creació, l’últim inici de sessió o la caducitat del compte.

En aquest primer exemple obtindrem el nom complet, l’adreça de correu i el telèfon de tots els usuaris.

Primer creem un enllaç entre el nostre SQL Server i l’Active Directory. Es coneix com a ADSI i és la manera correcta de connectar els dos sistemes.

Heu de canviar els valors de @rmtuser i @rmtpassword per les credencials d’un usuari que tingui permís per llegir l’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 d’aquí ja podem consultar l’AD directament. Recordeu canviar la ruta LDAP per la de la vostra unitat organitzativa:

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 en voleu saber més, al web de Richard Mueller hi ha un full d’Excel amb les propietats de l’AD i la seva correspondència amb l’eina «Usuaris i equips de l’Active Directory».

Nota: ADSI retorna com a màxim 1.000 objectes per consulta. Si en teniu més, haureu de filtrar per unitats organitzatives o per lletra inicial.

Espero que us sigui útil.

Traducció feta amb l’ajuda d’IA a partir de l’article original.