En esta entrada voy a explicaros como podemos vincular Active Directory con SQL Server para por ejemplo poder lanzar sentencias y obtener los miembros de un grupo, los usuarios de una unidad organizativa o la información que necesitemos.
Voy a enseñaros a realizarlo tanto desde la interfaz gráfica como por sentencias de SQL Server.
Configuración mediante Management Studio
Dentro de nuestro Management Studio y una vez nos hemos logado en nuestro motor de SQL nos posicionaremos sobre Server Object-Linked Server y con el botón derecho seleccionaremos «New Linked Server» para crear un nuevo servidor vinculado.
En la primera pestaña que nos aparecerá, General, rellenaremos la siguiente información:
- Linked Server: Aquí pondremos el nombre de nuestro servidor vinculado. En nuestro ejemplo lo nombraremos ADSI.
- Server Type: Seleccionamos Other data source y rellenamos los siguientes datos que os indico:
- Provider: OLE DB Provider for Microsoft Directory Services
- Product name: ADSDSOObject
- Data source: adsdatasource
Nos dirigiremos a la pestaña Security. En el caso que el usuario que vaya a ejecutar las sentencias tenga acceso a Active Directory no tenemos que cambiar nada en esta pestaña pero en el caso que el usuario no tenga acceso o bien las consultas van a ser lanzadas de forma interna por una aplicación entonces tendremos que seleccionar la opción «Be made using this security context» e introducir la información de un usuario con permiso sobre Active Directory.
Por último en la pestaña Server Options dejaremos las opciones tal y como vienen por defecto.
Pulsamos sobre OK para que se cree nuestro servidor vinculado.
Configuración mediante sentencia SQL
Accederemos a nuestro Management Studio, nos logaremos en nuestro motor de SQL y abriremos una nueva ventana de sentencias.
Al igual que en el apartado anterior podemos crear el servidor vinculado de dos formas:
Si el usuario que va a lanzar las sentencias tiene permiso sobre Active Directory utilizaremos el siguiente comando:
EXEC sp_addlinkedserver 'ADSI', 'Active Directory Services', 'ADSDSOObject', 'adsdatasource'
En el caso que el usuario no tenga permisos sobre Active Directory o bien las consultas se van a lanzar desde una aplicación usaremos la siguiente sentencia:
EXEC sp_addlinkedsrvlogin 'ADSI', 'false', NULL, 'UsuarioDominio', 'contraseña'
Y listo ya tendremos creado nuestro servidor vinculado.
Ejemplos ejecución sentencias sobre Active Directory
Voy a poneros algunos ejemplos para que veáis como se pueden montar consultas SQL para obtener datos de nuestro Active Directory utilizando el servidor vinculado que hemos creado.
Para que os funcionen estos ejemplos sólo tenéis que cambiar la ruta LDAP por la vuestra y la OU en caso de ser distinta.
Listado de todos los usuarios de una OU
SELECT name,mail,UserAccountControl,givenname,sn,sAMaccountname,location,department FROM OPENQUERY(adsi, 'SELECT name,mail,UserAccountControl,givenname,sn,sAMaccountname,location,department FROM ''LDAP://OU=Usuarios,dc=dominio,dc=com'' WHERE objectClass = ''user'' AND objectCategory = ''person''' ) ORDER BY name
Listado de todos los grupos de una OU
SELECT name, distinguishedname FROM OPENQUERY(adsi, 'SELECT name, distinguishedname FROM ''LDAP://OU=Grupos,dc=dominio,dc=com'' WHERE objectClass = ''group''' ) ORDER BY name
Listado de equipos del dominio
SELECT name, location FROM OPENQUERY(adsi, 'SELECT name, location FROM ''LDAP://OU=Equipos,dc=dominio,dc=com'' WHERE objectCategory = ''computer''' ) ORDER BY name
Y de esta forma podremos crear las consultas que necesitemos para obtener información de Active Directory.
Espero os haya servido de utilidad.
Me dedico a la Administración de Sistemas y he creado este blog para compartir mis conocimientos con toda la comunidad y así aportar mi granito de arena y ayudar a todo el que lo necesite.
hola una pregunta si yo realizo un cambio en la base de datos esta surtira efecto en el active directory, ejemplo si cambio el nombre de un usuario este surtira efecto en el active directory.
saludosl
Hola William,
La conexión que se establece es de solo lectura por lo que esta conexión podrás utilizarla para consultar datos pero no para modificarlos.
Saludos.
Una consulta si quiero ver todos los datos que me muestra solo coloco el select * from y toda la ruta?
Hola Yonathan,
Si quieres ver todos los campos tendrías que modificar la parte SELECT tanto del principio de la sentencia como la que se encuentra dentro de la ruta, ambas deben ser iguales.
Saludos.
Hola, y si no conozco los nombres de los campos de la tabla? pongo «select *» pero solo me regresa una columna, si especifico algunos que conozco si me regresa esos campos pero quiero saber todos los campos que tiene esa tabla… como le podria hacer? ya que los demas campos no se cuales son 🙁
Hola Aurora,
Si te vas a tu servidor de dominio, abres la consola de usuarios y equipos del dominio, activas las opciones avanzadas, editas un usuario y te vas a la pestaña de atributos ahí podrás verlos.
Saludos.
es posible usar esta herramienta para crear una suerte de autenticacion comprobando usuario y contraseña?
Hola Miguel,
No lo he hecho nunca, siento no poder ayudarte.
Saludos.