Servidores vinculados (motor de base de datos)

Se aplica a: SQL Server Azure SQL Managed Instance

Los servidores vinculados permiten que el Motor de base de datos de SQL Server y Azure SQL Managed Instance lean datos de los orígenes de datos remotos y ejecuten comandos en los servidores de bases de datos remotos (por ejemplo, orígenes de datos OLE DB) fuera de la instancia de SQL Server. Los servidores vinculados normalmente se configuran para habilitar el motor de base de datos a fin de ejecutar una instrucción Transact-SQL que incluye las tablas de otra instancia de SQL Server u otro producto de base de datos como Oracle. Muchos tipos de orígenes de datos OLE DB pueden configurarse como servidores vinculados, incluidos proveedores de bases de datos externos y Azure Cosmos DB.

Nota:

Los servidores vinculados están disponibles en SQL Server y Azure SQL Managed Instance (con algunas restricciones). Los servidores vinculados no están disponibles en Azure SQL Database.

¿Cuándo usar servidores vinculados?

Los servidores vinculados le permiten implementar bases de datos distribuidas que pueden capturar y actualizar datos en otras bases de datos. Los servidores vinculados son una buena solución en los escenarios donde hay que implementar particionamiento de base de datos sin necesidad de crear un código de aplicación personalizado ni cargarlo directamente desde los orígenes de datos remotos. Los servidores vinculados ofrecen las siguientes ventajas:

  • Capacidad de obtener acceso a datos fuera de SQL Server.

  • Capacidad de ejecutar consultas distribuidas, actualizaciones, comandos y transacciones en orígenes de datos heterogéneos en toda la organización.

  • Capacidad de tratar diferentes orígenes de datos de manera similar.

Puede configurar un servidor vinculado con SQL Server Management Studio o con la instrucción sp_addlinkedserver. Los proveedores OLE DB varían en gran medida en el tipo y el número de parámetros necesarios. Por ejemplo, algunos proveedores requieren que proporcione un contexto de seguridad para la conexión con sp_addlinkedsrvlogin. Algunos proveedores OLE DB que permiten a SQL Server actualizar datos en el origen de OLE DB. Otros solo proporcionan acceso a datos de solo lectura. Para obtener información acerca de cada proveedor OLE DB, consulte la documentación para dicho proveedor OLE DB.

Componentes de servidores vinculados

Una definición de servidor vinculado especifica los siguientes objetos:

  • Un proveedor OLE DB

  • Un origen de datos OLE DB

Un proveedor OLE DB es una biblioteca DLL que administra un origen de datos específico e interactúa con él. Un origen de datos OLE DB identifica la base datos específica a la que se puede tener acceso mediante OLE DB. Aunque los orígenes de datos en los que se realizan consultas a través de definiciones de servidores vinculados son bases de datos normales, existen proveedores OLE DB para una amplia variedad de archivos y formatos de archivo. Se trata de archivos de texto, datos de hojas de cálculo y los resultados de búsquedas de contenido de texto completo.

A partir de SQL Server 2019 (15.x), el controlador Microsoft OLE DB Driver for SQL Server (PROGID: MSOLEDBSQL) es el proveedor OLE DB predeterminado. En versiones anteriores, el proveedor OLE DB SQL Server Native Client (PROGID: SQLNCLI11) era el proveedor OLE DB predeterminado.

Importante

SQL Server Native Client (a menudo abreviado SNAC) se ha quitado de SQL Server 2022 (16.x) y SQL Server Management Studio 19 (SSMS). Para nuevos trabajos de desarrollo, no se recomiendan ni el proveedor OLE DB de SQL Server Native Client (SQLNCLI o SQLNCLI11) ni el proveedor OLE DB de Microsoft para SQL Server (SQLOLEDB) heredado. Cambie al nuevo Controlador Microsoft OLE DB para SQL Server de ahora en adelante.

Microsoft solo admite servidores vinculados a orígenes Microsoft Access y Excel si se usa el proveedor OLE DB de 32 bits Microsoft.JET.OLEDB.4.0.

Nota:

Las consultas distribuidas de SQL Server están diseñadas para ser usadas con cualquier proveedor OLE DB que implemente las interfaces OLE DB requeridas. Pero SQL Server se ha probado con el proveedor OLE DB predeterminado.

Detalles de servidores vinculados

En la siguiente ilustración se muestran los conceptos básicos de una configuración con servidores vinculados.

Diagrama en el que se muestran el nivel de cliente, el nivel de servidor y el nivel de servidor de base de datos.

Normalmente, los servidores vinculados se utilizan para tratar consultas distribuidas. Cuando una aplicación cliente ejecuta una consulta distribuida mediante un servidor vinculado, SQL Server analiza el comando y envía solicitudes a OLE DB. La solicitud de conjuntos de filas se puede realizar como una consulta al proveedor o abriendo una tabla base del proveedor.

Nota:

Para que un origen de datos devuelva información mediante un servidor vinculado, el proveedor OLE DB (DLL) para ese origen de datos debe encontrarse en el mismo servidor que la instancia de SQL Server.

Importante

Cuando se utiliza un proveedor OLE DB, la cuenta con la que se ejecuta el servicio de SQL Server debe tener permisos de lectura y ejecución para el directorio y todos los subdirectorios en los que esté instalado el proveedor. Esto incluye los proveedores publicados por Microsoft y cualquier proveedor externo.

Nota:

Los servidores vinculados admiten la autenticación de paso a través de Active Directory cuando se usa la delegación completa. A partir de SQL Server 2017 (14.x) CU17, también se admite la autenticación de paso a través con delegación restringida, pero no se admite la delegación restringida basada en recursos.

Administración de proveedores

Existe un conjunto de opciones para controlar cómo SQL Server carga y utiliza proveedores OLE DB que se hayan especificado en el registro.

Administración de definiciones de servidor vinculado

Cuando configure un servidor vinculado, registre la información de la conexión y del origen de datos con SQL Server. Una vez realizado el registro, se puede hacer referencia a ese origen de datos con un único nombre lógico.

Puede utilizar procedimientos almacenados y vistas de catálogo para administrar definiciones de servidores vinculados:

  • Cree una definición de servidor vinculado ejecutando sp_addlinkedserver.

  • Vea información acerca de los servidores vinculados definidos en una instancia específica de SQL Server ejecutando una consulta en las vistas de catálogo del sistema sys.servers.

  • Elimine una definición de servidor vinculado ejecutando sp_dropserver. También puede utilizar este procedimiento almacenado para quitar servidores remotos.

También puede definir los servidores vinculados mediante SQL Server Management Studio. En el Explorador de objetos, haga clic con el botón derecho en Objetos de servidor, seleccione Nuevoy, después, Servidor vinculado. Puede eliminar una definición de servidor vinculado al hacer clic con el botón derecho en el nombre del servidor vinculado y seleccionar Eliminar.

Cuando ejecute una consulta distribuida en un servidor vinculado, incluya el nombre de cuatro partes completo de una tabla para cada origen de datos en el que desee realizar la consulta. Este nombre de cuatro partes debe tener el formato linked_server_name.catalog.schema.object_name.

Nota:

Es posible definir servidores vinculados que señalen al servidor donde se han definido, es decir, que operen como bucle invertido. Los servidores en bucle invertido resultan muy útiles cuando se prueba una aplicación que utiliza consultas distribuidas en una red con un único servidor. Los servidores vinculados en bucle invertido están previstos para la realización de pruebas y no se admiten para muchas operaciones, como las transacciones distribuidas.

Servidores vinculados con Azure SQL Managed Instance

Los servidores vinculados de Azure SQL Managed Instance admiten la autenticación y la autenticación de SQL con Microsoft Entra ID (anteriormente Azure Active Directory).

Para usar trabajos del Agente SQL en Azure SQL Managed Instance para consultar un servidor remoto a través de un servidor vinculado, use sp_addlinkedsrvlogin para crear una asignación desde un inicio de sesión en el servidor local a un inicio de sesión en el servidor remoto. Cuando el trabajo del Agente SQL se conecta al servidor remoto a través del servidor vinculado, ejecuta la consulta T-SQL en el contexto del inicio de sesión remoto. Para obtener más información, consulte Trabajos de Agente SQL con Azure SQL Managed Instance.

Autenticación de Microsoft Entra

Los dos modos de autenticación Microsoft Entra son: de identidad administrada y de paso a través. La autenticación de identidad administrada se puede usar para permitir que los inicios de sesión locales consulten servidores vinculados remotos. La autenticación transferida permite que una entidad de seguridad que puede autenticarse con una instancia local acceda a una instancia remota a través de un servidor vinculado.

Para usar la autenticación transferida a través de Microsoft Entra para un servidor vinculado en Azure SQL Managed Instance, necesita los siguientes requisitos previos:

  • El mismo principal se agrega como inicio de sesión en el servidor remoto.
  • Ambas instancias son miembros del grupo de confianza de SQL.

Nota:

Las definiciones existentes de servidores vinculados que se configuraron para el modo de paso a través admiten la autenticación de Microsoft Entra. El único requisito para ello sería agregar SQL Managed Instance al grupo de confianza del servidor.

Las limitaciones siguientes se aplican a la autenticación de Microsoft Entra para servidores vinculados en Azure SQL Managed Instance:

  • La autenticación de Microsoft Entra no se admite para las instancias administradas de SQL en distintos inquilinos de Microsoft Entra.
  • La autenticación de Microsoft Entra para servidores vinculados solo se admite con la versión 18.2.1 y posteriores del controlador OLE DB.

MSOLEDBSQL19 y servidores vinculados

Actualmente, MSOLEDBSQL19 impide la creación de servidores vinculados sin cifrado y un certificado de confianza (no es suficiente un certificado autofirmado). Si se requieren servidores vinculados, use la versión compatible existente de MSOLEDBSQL.