Не удается выполнить резервное копирование базы данных SQL в хранилище BLOB-объектов Azure с помощью PowerShell или T-SQL - PullRequest
0 голосов
/ 05 января 2019

Мне кажется, что я следую документации 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 не разрешает это?

enter image description here

Как я могу просто сохранить резервную копию своей базы данных 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/

1 Ответ

0 голосов
/ 08 января 2019

Я думаю, что вы допустили ошибку в своих скриптах sql.

Вы создали учетные данные «Использование подписи общего доступа», но при резервном копировании вы использовали «Для URL-адреса с использованием идентификатора учетной записи хранения и ключа доступа», который не соответствует sas, который вы создали ранее.

Я тестирую его на своей стороне и работает нормально (создайте учетные данные «Использование подписи общего доступа» и выполните резервное копирование с помощью «К URL-адресу с использованием подписи общего доступа»).

IF NOT EXISTS (SELECT * FROM sys.credentials   
               WHERE name = 'https://xxx.blob.core.windows.net/container')  
CREATE CREDENTIAL [https://xxx.blob.core.windows.net/container] 
  WITH IDENTITY = 'SHARED ACCESS SIGNATURE',  
  SECRET = 'sv=xxx';


BACKUP DATABASE MyTest   
TO URL = 'https://xxx.blob.core.windows.net/container/123.bak'  
GO

Результат теста, как показано ниже:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...