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

SQL Azure导入导出操作失败:存储凭据无效问题排查求助

排查Azure SQL导入Bacpac时的"无效存储凭据"错误

以下是针对该报错的具体排查方向,结合你的脚本问题逐一分析:


1. 脚本核心逻辑冲突:同时混用SAS令牌与存储访问密钥

你的脚本中同时做了两个矛盾的操作:生成SAS令牌并拼接到Sourceurl,又指定-StorageKeyType StorageAccessKey并传入存储密钥。Azure SQL导入操作仅支持单一凭据方式,两种方式混用会直接导致凭据验证失败。

修正方案(二选一):

方式一:使用存储访问密钥

不需要在URL中拼接SAS令牌,直接用Blob基础地址:

# 移除SAS令牌拼接逻辑,使用基础Blob URL
$Sourceurl = "https://$StorageAccountName.blob.core.windows.net/$StorageContainerName/$ImportBacpacFilename"
$ImportRequest = New-AzSqlDatabaseImport -DatabaseName $DatabaseName -ResourceGroupName $ResourceGroupName `
    -StorageKeyType StorageAccessKey -StorageKey $StorageAccountKey -StorageUri $Sourceurl `
    -Edition Standard -ServiceObjectiveName S0 -DatabaseMaxSizeBytes 10737418240 `
    -AdministratorLogin $AdministratorLogin `
    -AdministratorLoginPassword (ConvertTo-SecureString $AdministratorLoginPassword -AsPlainText -Force) `
    -ServerName $ServerName

方式二:使用SAS令牌

将StorageKeyType改为SharedAccessSignature,传入原始SAS令牌(无需URL编码):

$StartTime = (Get-Date).AddMinutes(-5) # 提前5分钟生效,避免时间差问题
$ExpiryTime = $StartTime.AddHours(6)
$SasTokenRaw = New-AzStorageContainerSASToken -Name $StorageContainerName -Permission r `
    -StartTime $StartTime -ExpiryTime $ExpiryTime -Context $StorageAccountContext
$Sourceurl = "https://$StorageAccountName.blob.core.windows.net/$StorageContainerName/$ImportBacpacFilename$SasTokenRaw"

$ImportRequest = New-AzSqlDatabaseImport -DatabaseName $DatabaseName -ResourceGroupName $ResourceGroupName `
    -StorageKeyType SharedAccessSignature -StorageKey $SasTokenRaw -StorageUri $Sourceurl `
    -Edition Standard -ServiceObjectiveName S0 -DatabaseMaxSizeBytes 10737418240 `
    -AdministratorLogin $AdministratorLogin `
    -AdministratorLoginPassword (ConvertTo-SecureString $AdministratorLoginPassword -AsPlainText -Force) `
    -ServerName $ServerName

2. 存储账户密钥的索引匹配问题

脚本中通过(Get-AzStorageAccountKey ...)[0].Value获取密钥,但存储账户有Key1和Key2两个密钥,若你在门户验证的是Key2有效,但脚本取了Key1,会导致凭据无效。建议先输出密钥确认:

$StorageAccountKeys = Get-AzStorageAccountKey -ResourceGroupName $storageRG -Name $StorageAccountName
Write-Host "Key1: $($StorageAccountKeys[0].Value)"
Write-Host "Key2: $($StorageAccountKeys[1].Value)"

3. 存储账户与SQL服务器的网络访问限制

  • 若存储账户设置了允许选定网络,需确认:
    • SQL服务器的公网IP已加入存储账户防火墙白名单
    • 或开启了"允许受信任的Azure服务访问此存储账户"选项
  • 若SQL服务器部署在虚拟网络中,需配置存储账户的服务端点或私有链接确保连通

4. 其他潜在问题

  • SAS令牌权限:导入仅需读权限(r),脚本中-Permission rw多余但不影响,确保包含r即可
  • Blob路径验证:直接在浏览器中访问生成的Sourceurl,确认能正常下载Bacpac文件,排除路径或文件名错误
  • 模块版本:旧版Az.Sql模块可能存在bug,执行Update-Module -Name Az.Sql -Force更新到最新版
  • 数据库容量参数:脚本中-DatabaseMaxSizeBytes 5000000仅约4.77MB,远小于常规Bacpac大小,建议调整为实际需要的容量(如10GB对应10737418240)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:18:16