[英]“Error while decoding the storage key” when backing up SQL Server database to Azure Blob using Shared Access Signature
目標:我正在嘗試將我們的本地 SSMS 數據庫備份到我們的 Azure 雲存儲。
我有一個 blob 容器https://zutosqlbackupslive.blob.core.windows.net/dw1/這被設置為私有。
我創建了一個具有完全權限(允許所有資源類型,允許所有權限)的共享訪問簽名,開始日期為昨天,到期日期為明年。
使用密鑰 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'
由此產生的錯誤是:
Msg 3298, Level 16, State 2, Line 11
備份/恢復到 URL 設備錯誤:解碼存儲密鑰時出錯。消息 3013,級別 16,狀態 1,第 11 行
BACKUP DATABASE 異常終止。
任何人都可以從中看出什么是錯的,或建議下一步嘗試什么。
根據您的描述,我按照此處使用 SAS URL 創建 SQL 憑據。 這是我的測試,你可以參考:
為 SAS URL 和備份數據庫創建 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 令牌。
結果:
此外,要使用storage account name
和account access key
創建 SQL Server 憑據,您可以參考第 2 課:創建 SQL Server 憑據和第 3 課:將完整數據庫備份寫入 Windows Azure Blob 存儲服務。
如果您使用的是 SQL Server 2014 或更早版本,簡短的回答是使用訪問密鑰而不是 SAS。
我在使用 SAS(共享訪問簽名)時遇到了同樣的錯誤。我的理解是使用 SAS 是首選方法,即使在較舊的 SQL Server 版本上也可以使用。 SAS 在 SQL Server 2014 上不起作用,我不得不使用 Access Key 方法,然后我不再收到此錯誤消息。
我還修改了腳本,因此當我再次運行它時,如果密鑰發生變化,我可以更新它。 (這對 SAS 更有意義,因為它們已過期)
IF EXISTS
(SELECT * FROM sys.credentials
WHERE [name] = '<mycredentialname>')
BEGIN
CREATE CREDENTIAL [<mycredentialname>] WITH IDENTITY = '<mystorageaccountname>'
,SECRET = '<Access Key>';
END
ELSE
BEGIN
CREATE CREDENTIAL [<mycredentialname>] WITH IDENTITY = '<mystorageaccountname>'
,SECRET = '<Access Key>';
END
BACKUP DATABASE <database name>
TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/<mybackupfilename>'
WITH CREDENTIAL = '<mycredentialname>'
,COMPRESSION
,STATS = 1
,CHECKSUM ;
GO
在創建對共享訪問簽名類型連接的訪問權限時, "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>'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.