Sql server &引用;解码存储密钥时出错";使用共享访问签名将SQL Server数据库备份到Azure Blob时

Sql server &引用;解码存储密钥时出错";使用共享访问签名将SQL Server数据库备份到Azure Blob时,sql-server,azure,azure-storage-blobs,database-backups,Sql Server,Azure,Azure Storage Blobs,Database Backups,目标:我正在尝试将本地SSMS数据库备份到Azure云存储 我有一个水滴容器 这设置为私有 我已经创建了一个具有完全权限(允许所有资源类型,允许所有权限)的共享访问签名,开始日期为昨天,到期日期为明年 使用键1将其设置为allo HTTPS和HTTP 使用这个SAS,我可以通过将测试图像添加到图像文件URL的末尾来访问blob中的测试图像。所以我的SAS工作 SQL脚本 CREATE CREDENTIAL [AzureDWBackup] WITH IDENTITY = 'Sha

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

我有一个水滴容器 这设置为私有

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

使用键1将其设置为allo HTTPS和HTTP

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

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'
创建凭证[AzureDWBackup]
标识为“共享访问签名”时,
SECRET=''--这是从屏幕截图突出显示部分获取的密钥
去
备份数据库维护
到https://zutosqlbackupslive.blob.core.windows.net/dw1/Maintenance_DW1_FullBackup_20062017T1518.bak'
使用INIT,NOFORMAT,NAME=N'Maintenance\u DW1\u FullBackup\u 20062017T1518',STATS=10
,凭证=N'AzureDWBackup'
由此产生的错误是:

Msg 3298,第16级,状态2,第11行
备份/还原到URL设备错误:解码存储密钥时出错

Msg 3013,第16级,状态1,第11行
备份数据库正在异常终止


有人能从中看出问题所在,或建议下一步尝试什么吗

根据您的描述,我使用SAS URL创建了一个SQL凭据。这是我的测试,你可以参考它:

为SAS URL和备份数据库创建SQL凭据

--为SAS URL创建SQL凭据
创建标识为“共享访问签名”的凭据[https://{storage account name}.blob.core.windows.net/dbbackups]
,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'
--备份数据库
备份数据库[{您的数据库名称}]
TO URL='https://{storage account name}.blob.core.windows.net/dbbackups/brucedb_20160623114800.bak'
注意:您需要从SAS令牌中删除第一个

结果:


此外,要使用
存储帐户名和
帐户访问密钥创建SQL Server凭据,您可以参考和。

根据您的描述,我随后使用SAS URL创建了SQL凭据。这是我的测试,你可以参考它:

为SAS URL和备份数据库创建SQL凭据

--为SAS URL创建SQL凭据
创建标识为“共享访问签名”的凭据[https://{storage account name}.blob.core.windows.net/dbbackups]
,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'
--备份数据库
备份数据库[{您的数据库名称}]
TO URL='https://{storage account name}.blob.core.windows.net/dbbackups/brucedb_20160623114800.bak'
注意:您需要从SAS令牌中删除第一个

结果:

此外,要使用
存储帐户名和
帐户访问密钥创建SQL Server凭据,您可以参考和。

此-
“创建凭据[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>' 
创建凭证[https://.blob.core.windows.net/] 
具有标识='共享访问签名'
,SECRET=''
当创建对共享访问签名类型连接的访问权限时,此-
“创建凭据[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>' 
创建凭证[https://.blob.core.windows.net/] 
具有标识='共享访问签名'
,SECRET=''

如果您使用的是SQL Server 2014或更早版本,简短回答是使用访问密钥而不是SAS

我在使用SAS(共享访问签名)时也遇到了同样的错误。我的理解是,使用SAS是首选方法,即使在较旧的SQL Server版本上也可以。SAS无法在SQL Server 2014上工作,我必须使用Access Key方法,然后我不再收到此错误消息

我还修改了脚本,这样当我再次运行时,如果密钥发生变化,我可以更新它。(这对于SAS来说更有意义,因为它们将过期)

如果存在
(从sys.credentials中选择*
其中[名称]=“”)
开始
创建标识为“”的凭据[]
,SECRET='';
结束
其他的
开始
创建标识为“”的凭据[]
,SECRET='';
结束
备份数据库
到https://.blob.core.windows.net//'
具有凭证=“”
,压缩
,STATS=1
,校验和;
去

如果您使用的是SQL Server 2014或更早版本,简短回答是使用访问密钥而不是SAS

我在使用SAS(共享访问签名)时也遇到了同样的错误。我的理解是,使用SAS是首选方法,即使在较旧的SQL Server版本上也可以。SAS无法在SQL Server 2014上工作,我必须使用Access Key方法,然后我不再收到此错误消息

我还修改了脚本,这样当我再次运行时,如果密钥发生变化,我可以更新它。(这对于SAS来说更有意义,因为它们将过期)

如果存在
(从sys.credentials中选择*
其中[名称]=“”)
开始
创建标识为“”的凭据[]
,SECRET='';
结束
其他的
开始
创建标识为“”的凭据[]
,SECRET='';
结束
备份数据库
到https://.blob.cor