链接服务器(数据库引擎)

适用于:SQL ServerAzure SQL 托管实例

链接服务器使 SQL Server 数据库引擎和 Azure SQL 托管实例能够从远程数据源读取数据,并在 SQL Server 实例之外对远程数据库服务器(例如 OLE DB 数据源)执行命令。 通常,将链接服务器配置为使数据库引擎能够执行 Transact-SQL 语句,该语句包括 SQL Server 的另一个实例或其他数据库产品(如 Oracle)中的表。 可以将许多类型的 OLE DB 数据源配置为链接服务器,包括第三方数据库提供程序和 Azure Cosmos DB。

注意

SQL Server 和 Azure SQL 托管实例中提供链接服务器(但有一些限制)。 链接服务器在 Azure SQL 数据库中不可用。

何时使用链接服务器?

通过链接服务器,能够实现可在其他数据库中提取和更新数据的分布式数据库。 在需要实现数据库分片的情况下使用链接服务器,而无需创建自定义应用程序代码或直接从远程数据源加载。 链接服务器具有以下优点:

  • 能够访问 SQL Server 之外的数据。

  • 能够对企业内的异类数据源发出分布式查询、更新、命令和事务。

  • 能够以类似方式处理不同的数据源。

你可以使用 SQL Server Management Studio 或使用 sp_addlinkedserver 语句配置链接服务器。 OLE DB 提供程序在所需参数的类型和数量方面差异很大。 例如,一些提供程序要求你使用 sp_addlinkedsrvlogin 为连接提供一个安全性上下文。 某些 OLE DB 提供程序允许 SQL Server 更新 OLE DB 源上的数据。 其他则仅提供只读数据访问权限。 有关每个 OLE DB 访问接口的信息,请查看该 OLE DB 访问接口的文档。

链接服务器组件

链接服务器定义指定了下列对象:

  • 一个 OLE DB 提供程序

  • OLE DB 数据源

“OLE DB 访问接口” 是管理特定数据源并与其交互的 DLL。 OLE DB 数据源标识可以通过 OLE DB 访问的特定数据库。 虽然通过链接服务器定义进行查询的数据源通常是数据库,但也存在适用于各种文件和文件格式的 OLE DB 提供程序。 这些文件包括纯文本、电子表格数据和全文内容搜索的结果。

从 SQL Server 2019 (15.x) 开始,Microsoft OLE DB Driver for SQL Server (PROGID: MSOLEDBSQL) 是默认的 OLE DB 提供程序。 在早期版本中,SQL Server Native Client (PROGID: SQLNCLI11) 是默认的 OLE DB 提供程序。

重要

已从 SQL Server 2022 (16.x) 和 SQL Server Management Studio 19 (SSMS) 中移除 SQL Server Native Client(通常缩写为 SNAC)。 不建议在新的开发工作中使用 SQL Server Native Client OLE DB 提供程序(SQLNCLI 或 SQLNCLI11)和旧版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB)。 此后请切换到新的 Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server

仅当使用 32 位 Microsoft.JET.OLEDB.4.0 OLE DB 访问接口时,Microsoft 才支持指向 Excel 和 Access 数据源的链接服务器。

注意

SQL Server 分布式查询适用于任何实现所需 OLE DB 接口的 OLE DB 提供程序。 不过,SQL Server 已针对默认的 OLE DB 提供程序进行了测试。

链接服务器详细信息

下图显示了链接服务器配置的基础。

显示客户端层、服务器层和数据库服务器层的关系图。

通常,使用链接服务器来处理分布式查询。 当客户端应用程序通过链接服务器执行分布式查询时,SQL Server 将分析命令并向 OLE DB 发送请求。 行集请求可以采用以下形式:针对该提供程序执行查询,或从该提供程序打开基表。

为使数据源能通过链接服务器返回数据,该数据源的 OLE DB 提供程序 (DLL) 必须与 SQL Server 的实例位于同一服务器上。

使用完全委派时,链接服务器支持 Active Directory 传递身份验证。 从 SQL Server 2017(14.x)CU17 开始,还支持使用约束委派的直通身份验证;但是,不支持 基于资源的约束委派

重要

使用 OLE DB 提供程序时,运行 SQL Server 服务的帐户必须具有目录的读取和执行权限,以及安装提供程序的所有子目录。 此要求适用于Microsoft发布的提供程序和任何第三方提供程序。

管理提供方

有一组选项可以控制 SQL Server 如何加载和使用注册表中指定的 OLE DB 提供程序。

管理链接服务器定义

设置链接服务器时,请将连接信息和数据源信息注册到 SQL Server。 在注册之后,您可以使用一个逻辑名称来引用该数据源。

使用存储过程和目录视图管理链接服务器定义:

  • 通过运行 sp_addlinkedserver 创建链接服务器定义。

  • 通过对 sys.servers 系统目录视图运行查询,查看有关在 SQL Server 的特定实例中定义的链接服务器的信息。

  • 通过运行 sp_dropserver 删除链接服务器定义。 还可以使用此存储过程删除远程服务器。

还可以使用 SQL Server Management Studio 定义链接服务器。 在对象资源管理器中,右键单击 “服务器对象”,选择“ 新建”,然后选择 “链接服务器”。 通过右键单击链接服务器名称并选择“删除”,可以删除链接服务器定义。

对链接服务器执行分布式查询时,请对每个要查询的数据源指定由四个部分组成的完全限定的表名。 这四个部分的名称应采用格式 <linked_server_name>.<catalog>.<schema>.<object_name>

适用时,对临时对象的引用始终解析为本地实例的 tempdb,即使使用链接服务器名称做前缀也是如此。

可以定义链接服务器,使其指回(环回)到定义它们的服务器。 当在单服务器网络中测试使用分布式查询的应用程序时,环回服务器是很有用的。 环回链接服务器是为测试用途而设计的,并且不支持许多操作,比如分布式事务。

包含 Azure SQL 托管实例的链接服务器

Azure SQL 托管实例链接服务器同时支持 SQL 身份验证和 Microsoft Entra ID 身份验证。

若要使用 Azure SQL 托管实例上的 SQL 代理作业通过链接服务器查询远程服务器,请使用 sp_addlinkedsrvlogin 创建从本地服务器上的登录到远程服务器上登录的映射。 当 SQL 代理作业通过链接服务器连接到远程服务器时,会在远程登录的上下文中执行 T-SQL 查询。 有关详细信息,请参阅使用 Azure SQL 托管实例的 SQL 代理作业

Microsoft Entra 身份验证

两种受支持的 Microsoft Entra 身份验证模式为:托管标识和直通。 如果使用托管标识身份验证,将允许本地登录名查询远程链接服务器。 使用直通身份验证允许可以通过本地实例进行身份验证的主体通过链接服务器访问远程实例。

若要在 Azure SQL 托管实例中对链接服务器使用 Microsoft Entra 直通身份验证,需要满足以下先决条件:

  • 在远程服务器上将同一主体添加为登录名。
  • 这两个实例都是 SQL 信任组的成员。

注意

为直通模式配置的链接服务器的现有定义支持Microsoft Entra 身份验证。 唯一的要求是将 SQL 托管实例添加到 服务器信任组

以下限制适用于 Azure SQL 托管实例上链接服务器的 Microsoft Entra 身份验证:

  • 不同 Microsoft Entra 租户中的 SQL 托管实例不支持 Microsoft Entra 身份验证。
  • 仅 OLE DB 驱动程序版本 18.2.1 及更高版本才支持链接服务器的 Microsoft Entra 身份验证。

SQL Server 2025 和 MSOLEDBSQL 版本 19

从 SQL Server 2025(17.x)开始,MSOLEDBSQL 提供程序默认使用 Microsoft OLE DB 驱动程序 19。 此更新的驱动程序引入了重要的安全增强功能,包括对 TDS 8.0TLS 1.3 的支持。

TDS 8.0 通过新增一种加密选项来提升安全性,并引入了一项破坏性变更:参数 Encryption 不再是可选的。 当连接到另一个 SQL Server 实例时,必须在连接字符串中进行设置。

注意

如果没有参数 Encrypt ,SQL Server 2025 (17.x) 中的链接服务器默认 Encrypt=Mandatory 为并要求有效的证书。 没有有效证书的连接失败。

Encryption 参数提供三个不同的设置:

  • YesTrueMandatory
  • NoFalseOptional
  • Strict

Strict 选项强制使用 TDS 8.0,并且要求服务器证书进行安全连接。 对于Yes/True/Mandatory,需要受信任的证书。 不能使用自签名证书。

OLE DB 版本 加密参数 可能的值 默认值
OLE DB 18 可选 TrueMandatoryFalseNo No
OLE DB 19 Required NoFalseYesMandatoryStrict(新) Yes

支持该 TrustServerCertificate 参数,但不建议这样做。 将 信任服务器证书 设置为 Yes 禁用证书验证,从而削弱加密连接的安全性。 若要使用 信任服务器证书 ,客户端还必须在计算机注册表中启用它。 有关启用 信任服务器证书的信息,请参阅 注册表设置。 不建议为生产环境设置 TrustServerCertificate=Yes

当使用 Encrypt=FalseEncrypt=Optional 时:

  • 不需要证书。
  • 如果提供了受信任的证书,驱动程序不会对其进行验证。
  • 连接不提供任何加密。

当使用 Encrypt=TrueEncrypt=Mandatory 但不使用 TrustServerCertificate=Yes 时:

  • 连接需要有效的 CA 签名证书。
  • 证书必须与服务器的 FQDN 匹配。
  • 如果证书中的备用名称不同于 SQL Server 主机名,则必须 HostNameInCertificate 设置为 FQDN。
  • 证书必须安装在客户端计算机上的 受信任根证书颁发机构 存储中。

使用 Encrypt=Strict时:

  • 连接强制实施 TDS 8.0。
  • 连接需要使用 FQDN 匹配的有效 CA 签名证书。
  • HostNameInCertificate 必须设置为 FQDN。
  • 证书必须由客户端系统信任。
  • TrustServerCertificate 不支持配置。 必须存在有效的证书。
“信任服务器证书”客户端设置 连接字符串/连接属性:信任服务器证书 证书验证
0 No(默认值) 是的
0 Yes 是的
1 No(默认值) 是的
1 Yes

配置链接服务器连接时,必须在连接字符串中正确指定这些设置,以确保与新驱动程序的兼容性和安全性。

从之前的 OLEDB 版本进行更新

适用于:SQL Server 2025(17.x)及更高版本

使用 Microsoft OLE DB Driver 19 从以前的 SQL Server 版本迁移到 SQL Server 2025(17.x),现有链接服务器配置可能会失败。 加密参数的不同默认值可能会导致此失败,除非提供有效的证书。

或者,可以重新创建链接服务器,并将其包含在 Encrypt=Optional 连接字符串中。 如果无法修改链接服务器配置,请启用跟踪标志 17600 以维护 OLE DB 18 行为和默认值。

在 SQL Server Management Studio (SSMS) 链接服务器创建向导中,使用 “其他数据源” 选项手动配置链接服务器加密选项。

有关 OLE DB 19 以及 OLE DB 19 的加密、证书和信任服务器证书行为的详细信息,请参阅 OLE DB 中的加密和证书验证