为链接服务器配置托管标识

适用于适用于: SQL Server 2025 (17.x)

SQL Server 2025 引入了对链接服务器的托管标识支持,在 SQL Server 实例之间启用安全的无凭据身份验证。 此功能适用于 Azure 虚拟机上的 SQL Server 和 Azure Arc 启用的 SQL Server。使用托管标识身份验证,无需管理密码或存储凭据,即可建立链接服务器连接,从而改善安全状况并简化凭据管理。

本文介绍如何使用托管标识身份验证设置链接服务器连接。 将源服务器配置为启动连接,并将目标服务器配置为接受基于托管身份的身份验证。

先决条件

在开始之前,请确保具有以下各项:

  • 在以下任一上运行的 SQL Server 2025:
    • 安装了 SQL Server IaaS 代理扩展的 Azure 虚拟机,或
    • 已启用 Azure Arc 的本地或虚拟机
  • 在源服务器和目标服务器上配置的 Microsoft Entra 身份验证
  • 具有适当防火墙规则的源服务器和目标服务器之间的网络连接
  • 为在两个实例上创建登录账户和配置链接的服务器提供适当权限
  • 对于 Azure 虚拟机:已启用 SqlIaasExtensionAADLogin 扩展
  • 对于已启用 Azure Arc 的实例:安装和配置 Azure Arc 代理

Azure 虚拟机要求

在 Azure 虚拟机上使用 SQL Server 时:

已启用 Azure Arc 的要求

使用 Azure Arc 启用的 SQL Server 时:

  1. 按照 Azure Arc 启用的 SQL Server 的先决条件,在 SQL Server 2025 实例上安装和配置 Azure Arc。
  2. 根据应用注册中的指南设置Microsoft Entra身份验证。
  3. 验证源服务器与目标服务器之间的网络连接。

在目标服务器上创建登录名

目标服务器必须具有与源服务器名称匹配的登录名。 当源服务器使用托管标识进行连接时,它会使用计算机的托管标识进行身份验证。 目标服务器通过将其与从外部提供程序创建的登录名匹配来验证此标识。

  1. 连接到目标 SQL Server 实例。

  2. 使用源服务器的名称创建登录名:

    USE [master];
    GO
    
    CREATE LOGIN [AzureSQLVMSource]
    FROM EXTERNAL PROVIDER
    WITH DEFAULT_DATABASE = [master],
         DEFAULT_LANGUAGE = [us_english];
    GO
    
  3. 授予登录名适当的服务器级权限。 例如,若要授予 sysadmin 角色:

    ALTER SERVER ROLE [sysadmin] ADD MEMBER [AzureSQLVMSource];
    GO
    

    小窍门

    通过仅授予特定用例所需的权限而不是使用 sysadmin来应用最低特权原则。

在源服务器上配置链接服务器

在目标服务器上创建登录名后,在源服务器上配置链接服务器连接。 此配置使用 MSOLEDBSQL 提供程序进行托管标识身份验证。

  1. 连接到源 SQL Server 实例。

  2. 使用 sp_addlinkedserver 创建链接服务器:

    USE [master];
    GO
    
    EXEC master.dbo.sp_addlinkedserver
        @server = N'AzureSQLVMDestination',
        @srvproduct = N'',
        @provider = N'MSOLEDBSQL',
        @datasrc = N'AzureSQLVMDestination',
        @provstr = N'Authentication=ActiveDirectoryMSI;';
    GO
    

    @provstr 参数指定 ActiveDirectoryMSI 身份验证,该身份验证指示链接服务器使用托管标识。

  3. 配置链接服务器登录映射:

    EXEC master.dbo.sp_addlinkedsrvlogin
        @rmtsrvname = N'AzureSQLVMDestination',
        @useself = N'False',
        @locallogin = NULL,
        @rmtuser = NULL,
        @rmtpassword = NULL;
    GO
    

    此配置将链接服务器设置为使用托管标识,而无需显式用户凭据。

测试链接服务器连接

配置后,验证链接服务器连接是否正常工作。

  1. 使用 sp_testlinkedserver以下命令测试连接:

    EXECUTE master.dbo.sp_testlinkedserver AzureSQLVMDestination;
    GO
    
  2. 如果测试成功,可以查询远程服务器。 例如:

    SELECT * FROM [AzureSQLVMDestination].[master].[sys].[databases];
    GO
    

如果测试失败,请验证:

  • Microsoft在两台服务器上正确配置了 Entra 身份验证
  • 目标服务器上的登录名与源服务器名称完全匹配
  • 服务器之间存在网络连接
  • 防火墙规则允许 SQL Server 流量
  • 为 Azure VM 启用所需的扩展(SqlIaasExtensionAADLogin