调用New-AzSqlDatabaseImport提示存储账户无法访问如何解决
Azure SQL 导入bacpac存储访问报错解决方案
问题1:资源组归属影响说明
New-AzSqlDatabaseImport命令的-ResourceGroupName参数仅需要对应目标SQL服务器所属的资源组即可,存储账户和SQL服务器分属不同资源组不会对导入操作产生任何影响,跨资源组导入是Azure原生支持的场景,不属于本次报错的原因。
问题2:所需权限配置
分两种访问场景配置对应权限即可:
- 若使用存储账户密钥访问:
- 确保传入的是存储账户层级的访问密钥(而非容器、Blob层级的密钥),且密钥未过期、未被轮换
- 若存储账户开启了「禁止存储账户密钥访问」的强制AAD认证配置,无法使用密钥访问,需切换为托管身份认证方式
- 若使用托管身份/ SAS令牌访问:
- SAS令牌需至少包含
读(r)、列表(l)权限,服务范围勾选Blob、资源范围勾选容器与对象,过期时间需设置为晚于预估的导入完成时间 - 若使用SQL服务器的系统分配托管身份访问,需为该托管身份分配存储账户对应容器的「存储Blob数据读者」角色,调用命令时无需传入存储密钥参数
- SAS令牌需至少包含
问题3:存储账户防火墙规则调整
这是该报错的最常见诱因,按如下配置即可:
- 优先勾选存储账户防火墙配置页的允许来自受信任的Azure服务的连接例外选项,导入操作由Azure官方的SQL导入服务发起,属于受信任的第一方服务,开启该配置后无需额外添加IP白名单即可正常访问
- 若不允许开启上述例外,需将目标SQL服务器所在区域的所有Azure SQL服务公网IP段全部加入存储账户的IP白名单,该方案维护成本较高不推荐
- 若存储账户配置了专用终结点,需确保专用终结点所属虚拟网络与SQL导入服务网络互通,否则仍会被防火墙拦截
额外排查点
- 确认bacpac文件未处于归档存储层,若为归档层需先解冻为热/冷层才能被访问
- 确认传入的Blob URI为完整路径,未携带多余的SAS参数、拼写错误
- 确认存储账户未配置Blob不可修改、资源锁等限制访问的规则
内容的提问来源于stack exchange,提问作者OwN
相关产品推荐
相关产品推荐

