使用托管标识备份和还原到 URL

适用于:SQL Server 在 Azure 虚拟机上(仅限 Windows)

本文介绍如何使用 Microsoft Entra 托管标识,从 URL 备份和还原 Azure 虚拟机 (VM) 上的 SQL Server 数据库。

概述

从 SQL Server 2022 累积更新 17(CU17)开始,可以将托管标识与 SQL Server 凭据 配合使用,以便从 Azure Blob 存储备份和还原在 Azure VM 上的 SQL Server 数据库。 Managed identities为连接到支持Microsoft Entra身份验证的资源时使用的应用程序提供标识。

先决条件

  • SQL Server 2022 CU17 或更高版本的 AZURE VM 上的SQL Server使用 SQL IaaS 代理扩展注册
  • 备份到 URL 或从 URL 还原的SQL Server实例必须配置Microsoft Entra身份验证,无论该实例是否是向扩展注册的实例。
  • Azure Blob 存储帐户
  • 对 Azure Blob 存储的有效网络访问、主机上 Windows 防火墙的权限以允许出站连接,以及有效的存储帐户服务终结点。
  • Azure VM 上SQL Server的主要托管标识需要:
    • 要分配用户分配的托管标识或系统分配的托管标识。 如需更多信息,请参阅在 Azure 虚拟机 (VM) 上配置托管标识
    • 具有分配给存储帐户的主要托管标识的 Storage Blob Data Contributor 角色。

使用托管标识创建服务器凭证

若要使用 T-SQL 命令 BACKUP DATABASE <database name> TO URLRESTORE <database name> FROM URL 托管标识,需要创建使用托管标识的服务器凭据。 凭据名称表示Azure存储 URL,并指示存储数据库备份的位置。

以下示例演示如何为托管标识创建凭据:

CREATE CREDENTIAL [https://<storage-account-name>.blob.core.chinacloudapi.cn/<container-name>] 
    WITH IDENTITY = 'Managed Identity'

WITH IDENTITY = 'Managed Identity' 子句要求将主要托管标识分配给 Azure VM 上的 SQL Server。

有关未分配主托管标识或授予适当权限时可能发生的错误消息的详细信息,请参阅 “错误消息 ”部分。

使用托管身份验证将数据备份到 URL

创建凭据后,可以使用它将数据库备份和还原到Azure Blob存储。 确保 Azure VM 上的 SQL Server 的主托管标识具有分配给存储帐户的 Storage Blob Data Contributor 角色。

以下示例演示如何使用托管标识凭据将数据库备份到 Azure Blob 存储:

BACKUP DATABASE [AdventureWorks]
    TO URL = 'https://<storage-account-name>.blob.core.chinacloudapi.cn/<container-name>/AdventureWorks.bak'

使用托管标识从 URL 恢复

以下示例演示如何使用托管标识凭据从 Azure Blob 存储还原数据库:

RESTORE DATABASE [AdventureWorks]
    FROM URL = 'https://<storage-account-name>.blob.core.chinacloudapi.cn/<container-name>/AdventureWorks.bak'

错误消息

使用 跟踪标志 4675 检查使用托管标识创建的凭据。 如果在未启用跟踪标志 4675 的情况下运行 CREATE CREDENTIAL 该语句,如果未为服务器设置主托管标识,则不会返回错误消息。 若要对这种情况进行故障排除,必须在启用跟踪标志后删除并重新创建凭据。

未分配主要托管标识

如果未将主托管标识分配给Azure VM 上的SQL Server,则备份和还原操作将失败,并显示一条错误消息,指示未选择托管标识。

Msg 37563, Level 16, State 2, Line 14
The primary managed identity is not selected for this server. Enable the primary managed identity for Microsoft Entra authentication for this server. For more information see (https://aka.ms/sql-server-managed-identity-doc).`

未分配 Storage Blob Data Contributor 角色

如果未将 Storage Blob Data Contributor 角色分配给 Azure VM 上SQL Server的主托管标识,则 BACKUP 操作将失败,并显示指示访问被拒绝的错误消息。

Msg 3201, Level 16, State 1, Line 31
Cannot open backup device 'https://<storage-account-name>.blob.core.chinacloudapi.cn/<container-name>/AdventureWorks.bak'. Operating system error 5(Access is denied.).
Msg 3013, Level 16, State 1, Line 31
BACKUP DATABASE is terminating abnormally.

如果未将 Storage Blob Data Contributor 角色分配给 Azure VM 上SQL Server的托管标识,RESTORE 操作将失败,并显示指示拒绝访问的错误消息。

Msg 3201, Level 16, State 1, Line 31
Cannot open backup device 'https://<storage-account-name>.blob.core.chinacloudapi.cn/<container-name>/AdventureWorks.bak'. Operating system error 5(Access is denied.).
Msg 3013, Level 16, State 1, Line 31
RESTORE DATABASE is terminating abnormally.

网络或防火墙问题

如果未配置对 Azure Blob 存储的有效网络访问,且未配置 Windows 主机上的防火墙权限,不允许出站连接,且未配置有效的存储帐户服务终结点,那么 BACKUP 操作将失败,并显示一条指示访问被拒绝的错误消息。

Msg 3201, Level 16, State 1, Line 31
Cannot open backup device 'https://<storage-account-name>.blob.core.chinacloudapi.cn/<container-name>/AdventureWorks.bak'. Operating system error 5(Access is denied.).
Msg 3013, Level 16, State 1, Line 31
BACKUP DATABASE is terminating abnormally.

如果未配置对 Azure Blob 存储的有效网络访问,且未配置 Windows 主机上的防火墙权限,不允许出站连接,且未配置有效的存储帐户服务终结点,那么 RESTORE 操作将失败,并显示一条指示访问被拒绝的错误消息。

Msg 3201, Level 16, State 1, Line 31
Cannot open backup device 'https://<storage-account-name>.blob.core.chinacloudapi.cn/<container-name>/AdventureWorks.bak'. Operating system error 5(Access is denied.).
Msg 3013, Level 16, State 1, Line 31
RESTORE DATABASE is terminating abnormally.

重复的数据库名称

当存储中存在同名的原始数据库时,将新数据库还原到同一存储路径失败,并出现以下错误:

Msg 1834, Level 16, State 1, Line 35
RESTORE DATABASE AdventureWorks
FROM URL = 'https://<storage-account-name>.blob.core.chinacloudapi.cn/<container-name>/AdventureWorks.bak';
Msg 1834, Level 16, State 1, Line 35
The file 'C:\Server\sqlservr\data\AdventureWorks.mdf' cannot be overwritten.  It is being used by the database 'AdventureWorks'.
Msg 3156, Level 16, State 4, Line 35
File 'AdventureWorks' cannot be restored to 'C:\Server\sqlservr\data\AdventureWorks.mdf'. Use WITH MOVE to identify a valid location for the file.

若要解决此问题,请在还原数据库之前删除原始数据库或将已使用的文件移动到其他位置。 有关详细信息,请参阅 将数据库存储到新位置(SQL Server)

局限性

  • Azure VM 上的SQL Server支持服务器级托管标识,但本地SQL Server不支持。 Linux 不支持服务器级托管标识。

  • Azure VM 上的 SQL Server 从 SQL Server 2022 CU17 开始,支持使用托管标识的 BACKUP TO URLRESTORE FROM URL。 从 SQL Server 2025 开始,本地 SQL Server 支持使用托管身份的 BACKUP TO URLRESTORE FROM URL

  • 故障转移群集实例(FCI)不支持托管标识。

  • 只能使用与 Azure VM 上 SQL Server 相同的托管标识来运行 BACKUP TO URL,无论在 VM 上的服务器是否有一个或多个 SQL Server 实例。