使用共享访问签名将SQL Server数据库备份到Azure Blob时“解码存储密钥时出错”

问题描述 投票:0回答:2

目标:我正在尝试将我们的本地SSMS数据库备份到Azure云存储。

我有一个blob容器https://zutosqlbackupslive.blob.core.windows.net/dw1/这是私人的。

我创建了一个具有完全权限的共享访问签名(允许所有资源类型,允许所有权限),开始日期为昨天,到期日期为明年。

它使用密钥1设置为allo HTTPS和HTTP。

使用此SAS,我可以通过将其添加到图像文件的URL末尾来访问blob中的测试图像。所以我的SAS工作。

enter image description here

SQL脚本

CREATE CREDENTIAL [AzureDWBackup]
        WITH IDENTITY = 'Shared Access Signature',
        SECRET = '<<SAS key>>' -- this the key taken from the highlighted section of the screenshot
GO

BACKUP DATABASE Maintenance
TO URL = 'https://zutosqlbackupslive.blob.core.windows.net/dw1/Maintenance_DW1_FullBackup_20062017T1518.bak'
WITH INIT, NOFORMAT, NAME = N'Maintenance_DW1_FullBackup_20062017T1518', STATS = 10
, CREDENTIAL = N'AzureDWBackup'

产生的错误是:

Msg 3298,Level 16,State 2,Line 11 备份/还原到URL设备错误:解码存储密钥时出错。

Msg 3013,Level 16,State 1,Line 11 BACKUP DATABASE异常终止。

任何人都可以从中看出什么是错的,或建议下一步尝试什么。

sql-server azure azure-storage-blobs database-backups
2个回答
1
投票

根据您的描述,我按照here创建了带有SAS URL的SQL Credential。这是我的测试,你可以参考它:

为SAS URL和备份db创建SQL凭据

--Create a SQL Credential for the SAS URL
CREATE CREDENTIAL [https://{storage-account-name}.blob.core.windows.net/dbbackups] WITH IDENTITY = 'Shared Access Signature'  
,SECRET = 'st=2017-04-22T03%3A55%3A00Z&se=2017-07-29T03%3A55%3A00Z&sp=rwdl&sv=2015-12-11&sr=c&sig=Txv%2FWrStGYb6ax1dzb47WbBjO7iNCbwohl02jodhuNw%3D'

--backup the database
BACKUP DATABASE [{your-database-name}]
TO URL = 'https://{storage-account-name}.blob.core.windows.net/dbbackups/brucedb_20160623114800.bak'

注意:您需要从SAS令牌中删除第一个?

结果:

enter image description here

enter image description here

此外,要使用storage account nameaccount access key创建SQL Server凭据,您可以参考Lesson 2: Create a SQL Server CredentialLesson 3: Write a Full Database Backup to the Windows Azure Blob Storage Service


0
投票

这 - 在创建对共享访问签名类型连接的访问​​时,"CREATE CREDENTIAL [AzureDWBackup]"需要是访问URL。

您使用了cust0m名称而不是

CREATE CREDENTIAL [https://zutosqlbackupslive.blob.core.windows.net/dw1]

示例模板:

CREATE CREDENTIAL [https://<storage_account_name>.blob.core.windows.net/<container>] 

   WITH IDENTITY = 'SHARED ACCESS SIGNATURE' 

   , SECRET = '<shared_access_signature_key_with_removed_first_?_symbol>' 
© www.soinside.com 2019 - 2024. All rights reserved.