Linked Server en SQL Server

Hola a todos, hoy vamos a ver una característica de SQL Server que permite conectarte desde tu base de datos a otras bases de datos, y ejecutar consultas sobre ellas. Son los Linked Server en SQL Server.

Qué es un Linked Server

Un Linked Server es una conexión lógica definida en SQL Server que apunta a otro origen de datos. Ese origen puede ser:

  • Otro SQL Server
  • Otro motor de BBDD (Oracle, MySQL, PostgreSQL, Access…).
  • Un fichero de texto, Excel…
  • Cualquier fuente accesible mediante OLE DB.

El origen de datos externo debe tener los drivers instalados para poder usarlos en la configuración de la conexión. Los distintos proveedores a los que se puede acceder se pueden ver en el momento de la creación del Linked Server en el listado desplegable «Provider»

Creación de un Linked Server

Un Linked Server se puede crear de dos formas, desde el Management Studio o desde comandos.

Desde el Management Studio los Linked Server se encuentran a nivel de instancia en el directorio «Server Objects».

El primer paso es especificar un nombre y el proveedor OLE DB al que hay que conectarse, o bien especificar que es otro SQL Server. En este caso los drivers están instalados con la instalación del motor. En este caso, el nombre debe ser el de la instancia a la que se quiere acceder.

Linked Server en SQL Server

Después en la pestaña «Security» se especifica el usuario local que se va a utilizar, como el usuario de la BBDD remota a la que se va a conectar el Linked Server, y que debe tener permisos sobre los objetos que queramos consultar en esa BBDD Remota.
Si se marca el check «impersonate» SQL Server intentará conectarse al servidor remoto usando la identidad del login local. Esto requiere que el servidor remoto acepte Windows Authentication.

Opciones de seguridad

En la misma pestaña «Security», hay que especificar qué debe hacer el Linked Server si el usuario que intenta usar el Linked Server no está en el listado configurado.

Hay varias opciones:

Linked Server en SQL Server

1. ‘Not be made’ – No se permite la conexión al Linked Server. Es la opción cuando se necesita la mayor seguridad posible.
2. ‘Be made without using a security context’ – Permite la conexión sin credenciales. Puede generar problemas de seguridad. No se recomienda su uso.
3. ‘Be made using the login’s current security context’ – Similar a chequear «impersonate» en la configuración de los login. Se puede utilizar en entornos Windows con Active Directory y confianza entre servidores.
4. ‘Be made using this security context’ – Usa un usuario y contraseña fijos. Se utiliza cuando se tiene un usuario genérico para los login no mapeados.

También se puede crear mediante comandos, por medio de dos procedimientos almacenados, cuya sintaxis es la siguiente:

-- Crear el Linked Server
EXEC sp_addlinkedserver
    @server = 'ServidorRemoto',           -- Nombre lógico del linked server
    @srvproduct = '',                     -- Producto (vacío para SQL Server)
    @provider = 'SQLNCLI',                -- Proveedor OLE DB (SQL Native Client)
    @datasrc = 'NombreServidorRemoto';    -- Nombre del servidor remoto

- Configurar credenciales para el Linked Server
EXEC sp_addlinkedsrvlogin
    @rmtsrvname = 'ServidorRemoto',       -- Nombre del linked server
    @useself = 'FALSE',                   -- No usar credenciales locales
    @locallogin = NULL,                   -- Para todos los usuarios
    @rmtuser = 'usuario_remoto',          -- Usuario remoto
    @rmtpassword = 'contraseña_remota';   -- Contraseña remota

Uso de un Linked Server

Existen dos formas de utilizar un Linked Server para consultar datos en un servidor remoto.

Por un lado, se puede anteponer el nombre del Linked Server al objeto que queremos consultar.

SELECT *
FROM Linked_Server.BBDDRemota.dbo.tabla

También se puede utilizar la claúsula OPENQUERY (Esta es más eficiente)

SELECT *
FROM OPENQUERY(Linked_Server, 'SELECT * FROM BBDDRemota.dbo.tabla');

Ejemplo de uso

Se puede acceder a los mismos datos de las dos formas mencionadas. Se puede hacer un ejemplo de acceso a una tabla llamada «empleados», que se encuentra dentro de una BBDD llamada «empresa», y que se encuentra en otra instancia SQL Server llamada [WIN2016SALTO01\PRUEBALK] donde se ha creado un Linked Server con el mismo nombre.

Si se utiliza el nombre completo del objeto

Si se utiliza la claúsula OPENQUERY, se devuelve el mismo resultado

Linked Server en SQL Server

Más adelante, haremos una comparación de las dos posibilidades de uso a los Linked Server en cuanto a optimización de las consultas.

No dudéis en poneros en contacto con nosotros en caso de necesitar ayuda en la gestión de vuestras bases de datos. Échale un vistazo a nuestros servicios de soporte y mantenimiento SQL Server y Oracle.

¿Aún no conoces Query Performance? Descubre cómo puede ayudarte en tu entorno Oracle. Más información en su página de LinkedIn.

Sígue a GPS en LinkedIn

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *