使用New-AzSqlDatabaseExport时SAS令牌无法生效的问题求助
问题解答
New-AzSqlDatabaseExport完全支持SAS令牌作为输入,你的脚本失效是因为两个关键配置错误:
错误1:StorageUri参数指向错误
你当前传入的StorageUri是存储账户的根地址,而该参数需要指定导出的bacpac文件的完整Blob路径,也就是你代码里已经拼接好的$storageURI变量。
错误2:SAS令牌格式不正确
传入StorageKey的SAS令牌不能包含开头的?符号,必须去掉这个前缀。
修正后的完整脚本
Param ( [string][Parameter(Mandatory=$true)] $AdminPassword ) Process { $AdminSecurePassword = ConvertTo-SecureString –String $AdminPassword –AsPlainText -Force $sasToken = 'sv=2022-11-02&ss=bfqt&srt=sco&sp=rwdlacupiytfx&se=2023-11-23T18:11:49Z&st=2023-11-23T10:11:49Z&sip=49.200.220.5&spr=https&sig=i68D3IxhabcdxyzfHoMIHuQ2DBvgRzc42UXFisKdf2PJoSQ%3D' $Context = New-AzStorageContext -StorageAccountName "storageaccount" -Environment 'AzureCloud' -SasToken $sasToken $container=Get-AzStorageContainer -Name 'sqlblobtest' -Context $Context $storageURI=$container.CloudBlobContainer.Uri.OriginalString+"/sqlagent.bacpac" $exportRequest = New-AzSqlDatabaseExport ` -ResourceGroupName 'TEST-AZURE-RG' ` -ServerName 'test-azure-sql' ` -DatabaseName 'Customers' ` -StorageKeytype 'SharedAccessKey' ` -StorageKey $sasToken ` -StorageUri $storageURI ` -AdministratorLogin 'testadmin' ` -AdministratorLoginPassword $AdminSecurePassword Get-AzSqlDatabaseImportExportStatus -OperationStatusLink $exportRequest.OperationStatusLink }
补充说明
- SAS令牌作为
SharedAccessKey使用时,必须确保令牌拥有容器的写入权限(你的令牌里sp=rwdlacupiytfx已经包含了写入权限,这部分没问题) - 确认SAS令牌的有效期、IP限制等规则和当前执行环境匹配,避免因权限范围外导致的访问失败
内容的提问来源于stack exchange,提问作者rb16
相关产品推荐
相关产品推荐

