从BLOB存储恢复Azure SQL时提示无法打开备份设备 访问被拒绝
问题根因与解决方法
核心触发原因
- SAS令牌格式错误:Azure门户生成的SAS默认开头带
?字符,创建凭据时如果直接填入带问号的SAS,会导致身份校验失败,触发权限报错。 - 存储白名单配置错误:你此前将SSMS所在VM的公网IP加入存储白名单,但该恢复操作是Azure SQL实例直接发起请求拉取存储的备份文件,而非VM发起请求,所以存储白名单未放行Azure SQL实例的IP,导致访问被拒绝。
- 凭据匹配错误:创建的凭据名称必须和恢复时使用的URL前缀完全一致,多/少末尾斜杠、字符拼写错误都会导致SQL无法匹配到对应凭据,无法完成身份认证。
- SAS权限/有效期配置不符合要求:即使你确认SAS具备读写权限,也可能存在有效期已过期、SAS范围未覆盖目标备份文件、IP限制和SQL实例IP冲突的问题。
- 权限不足:当前操作账号虽然有db owner权限,但缺少master库下凭据的访问权限,也会触发该报错。
解决步骤
- 先清理已创建的错误凭据,执行以下SQL:
USE master DROP CREDENTIAL [https://imis20prodstorageaccount.blob.core.windows.net/backups] GO
- 重新生成存储容器的SAS令牌,生成时确认:
- 权限勾选
Read、List - 有效期设置为超出当前操作时间至少24小时
- 资源类型勾选「容器」、「对象」,服务类型选择Blob
- 复制生成的SAS令牌后,删除开头的第一个
?字符再保存备用
- 重新创建凭据,确保凭据名称和恢复时使用的URL前缀完全一致:
USE master CREATE CREDENTIAL [https://imis20prodstorageaccount.blob.core.windows.net/backups] WITH IDENTITY='SHARED ACCESS SIGNATURE', SECRET = '处理后的不带开头问号的SAS令牌' GO
- 调整存储账户防火墙配置:在Azure门户存储账户的网络设置页,添加你的Azure SQL实例的公网出站IP到白名单(该IP可在Azure SQL实例的概述页查询到)。
- 先执行测试命令验证权限:
RESTORE FILELISTONLY FROM URL = 'https://imis20prodstorageaccount.blob.core.windows.net/backups/GGC_iMIS-5-10-21.BAK'
测试无报错后,再执行正式的数据库恢复命令即可。
内容的提问来源于stack exchange,提问作者Chris Green
相关产品推荐
相关产品推荐

