You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加凭据参数后SSMS中运行SQL Server从Azure Blob还原语句报错如何解决

问题原因

你参考的教程适用于本地SQL Server或Azure虚拟机部署的SQL Server,而你当前使用的是Azure SQL托管实例,二者的RESTORE语法规则存在差异:托管实例不支持在RESTORE语句中显式指定CREDENTIAL参数,会直接匹配与Blob容器路径同名的专用SAS凭据完成鉴权。

解决步骤

  1. 先删除你之前创建的自定义名称凭据Credential_BLOB
  2. 进入Azure存储账户对应容器的配置页,生成共享访问签名(SAS):
  • 权限勾选「读取、列出」
  • 过期时间设置为晚于你预计完成还原的时间
  • 生成后复制SAS令牌,去掉开头的?符号备用
  1. 执行以下语句创建托管实例专用凭据,注意凭据名称必须和容器的完整URL完全一致:
CREATE CREDENTIAL [https://<存储账户名>.blob.core.windows.net/<容器名>]
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<去掉?前缀的SAS令牌>';
  1. 去掉WITH CREDENTIAL参数,直接执行还原语句即可:
RESTORE DATABASE Database_Name 
FROM URL = 'https://<存储账户名>.blob.core.windows.net/<容器名>/SampleDatabase.bak'
-- 如有需要可补充其他参数,示例:
-- MOVE '逻辑数据文件名' TO '/var/opt/mssql/data/你的库名.mdf',
-- MOVE '逻辑日志文件名' TO '/var/opt/mssql/data/你的库名.ldf',
REPLACE, STATS = 5;

注意事项

  • 凭据名称必须和容器完整URL完全匹配,多余的斜杠、大小写不一致都会导致鉴权失败
  • 请生成容器层级的SAS,不要使用存储账户层级的SAS,避免权限过大
  • 如仍报错,优先检查SAS是否过期、存储账户防火墙是否放行了托管实例的出站访问权限

内容的提问来源于stack exchange,提问作者Richard Rodjues

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:39:03