Мне кажется, что я следую документации Microsoft по резервному копированию баз данных SQL в хранилище BLOB-объектов Azure; тем не менее, я продолжаю нажимать одну и ту же ошибку, что бы я ни пытался.
Например, следующий код создает учетные данные SQL и пытается создать резервную копию базы данных.
После запуска ошибка указывает, что я не могу использовать WITH CREDENTIAL и SAS, но Microsoft демонстрирует использование обоих непосредственно в своей документации (https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/sql-server-backup-to-url?view=sql-server-2017#Examples)!
declare @databaseName varchar(50)
declare @destinationAzureStorageContainerPath varchar(256)
declare @destinationBlobPath varchar(256)
declare @timestampUtc as nvarchar(30)
select @timestampUtc = replace(convert(nvarchar(30), getutcdate(), 126), ':', '_');
set @databaseName = 'DWConfiguration'
set @destinationAzureStorageContainerPath = 'https://mystorageaccount.blob.core.windows.net/mystoragecontainer/'
SET @destinationBlobPath = @destinationAzureStorageContainerPath + @databaseName + '_' + @timestampUtc + '.BAK'
if not exists
(select * from sys.credentials
where name = 'https://mystorageaccount.blob.core.windows.net/mystoragecontainer/')
create CREDENTIAL [https://mystorageaccount.blob.core.windows.net/mystoragecontainer/]
with IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'sv... this is my token ...';
backup DATABASE @databaseName
to URL = @destinationBlobPath
with CREDENTIAL = 'https://mystorageaccount.blob.core.windows.net/mystoragecontainer/'
,COMPRESSION
,STATS = 5
Ошибка:
Сообщение 3225, Уровень 16, Состояние 1, Строка 28
Использование синтаксиса WITH CREDENTIAL недопустимо для учетных данных, содержащих подпись общего доступа.
Сообщение 3013, уровень 16, состояние 1, строка 28
РЕЗЕРВНАЯ БАЗА ДАННЫХ завершается ненормально.
В качестве альтернативного подхода я решил использовать PowerShell.
Backup-SqlDatabase -ServerInstance "myserver" -Database "DWConfiguration" -BackupFile "https://mystorageaccount.blob.core.windows.net/mystoragecontainer/mydatabase_2019-01-04T20_01_03.127.bak" -SqlCredential "https://mystorageaccount.blob.core.windows.net/mystoragecontainer/"
Как видите, это приводит к одной и той же досадной ошибке!
Backup-SqlDatabase: System.Data.SqlClient.SqlError: Использование синтаксиса WITH CREDENTIAL недопустимо для учетных данных
содержащий подпись общего доступа.
На самом BLOB-объекте я установил «Приватный (без анонимного доступа)». Я хочу, чтобы только аутентифицированные запросы имели доступ к BLOB-объектам. Может ли это быть проблемой? Если так, почему WITH CREDENTIAL
не разрешает это?
Как я могу просто сохранить резервную копию своей базы данных SQL в моей учетной записи хранения Azure?
Ref. https://blog.sqlauthority.com/2018/07/17/sql-server-backup-to-url-script-to-generate-credential-and-backup-using-shared-access-signature-sas/