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
相关产品推荐
相关产品推荐

