- Проверяем состояние процесса первоначального шифрования базы
- «горячее» сохранение файлов
- «холодное» сохранение файлов бд
- Восстановление зашифрованной базы данных из бэкапа
- Восстановление на точку
- Восстановления database master key и сертификата
- Вручную сохранить в надежном месте секретные ключи или qr-коды
- Выгрузка данных
- Запускаем процесс шифрования базы
- Инкрементальное резервное копирование
- Использовать облачную синхронизацию приложения-аутентифкатора
- Как создать резервную копию сертификата файловой системы
- Резервное копирования database master key и сертификата (с закрытым ключом)
- Создаем database master key в базе [master]
- Создаем ключ шифрования database encryption key (dek) в базе данных
- Создаем сертификат, которым будет зашифрован ключ шифрования базы данных: database encryption key (dek)
- Траблшутинг при включении tde
- Установить приложение-аутентификатор сразу на несколько устройств
- Шифрование резервных копий в sql server 2021
- Экспортировать сертификат и ключ полученный через win-acme | блог сисадмина
- Экспортировать уже заведенные в аутентификаторе токены
Проверяем состояние процесса первоначального шифрования базы
SELECT db.name, db.is_encrypted, dm.encryption_state, dm.percent_complete, dm.key_algorithm FROM sys.databases db JOIN sys.dm_database_encryption_keys dm ON db.database_id = dm.database_id WHERE db.name = 'MyDatabaseName'
«горячее» сохранение файлов
Большинство резервных копий современных баз данных выполняется путём копирования файлов базы данных без остановки базы. Здесь видны несколько проблем:
Для того, чтобы резервная копия получилась согласованной, у каждой СУБД существует команда, которая сообщает, что начат процесс резервного копирования. Синтаксически эта команда может выглядеть по-разному:
Несмотря на синтаксические различия, процесс подготовки к резервному копированию выглядит одинаково.
Вот как выглядит подготовка к резервному копированию в СУБД с изменяемыми дисковыми структурами, т. е. во всех традиционных дисковых реляционных системах:
- Запоминается момент начала резервного копирования; резервная копия должна будет содержать журналы базы данных начиная с этого момента.
- Выполняется контрольная точка, то есть все изменения, которые произошли в страницах данных до запомненного момента, сбрасываются на диск. Это гарантирует, что журналы до момента начала резервного копирования при восстановлении не потребуются.
- Включается особый режим журналирования: если страница данных изменилась в первый раз после загрузки с диска, то вместо того, чтобы записывать в журнал изменения страницы, база запишет туда страницу целиком. При выполнении подготовительной процедуры все страницы вытесняются на диск, и поэтому при первом изменении блок всегда будет записан в журнал целиком. Но если в процессе резервного копирования страница снова будет вытеснена на диск, то следующее её изменение также приведёт к появлению в журнале полной копии страницы. Это гарантирует, что если вдруг при копировании файла с данными страница получится некорректной, применение журнала сделает его корректной вновь.
- Блокируется изменение заголовков файлов данных, то есть той его части, изменения которой не отражаются в журналах. Это гарантирует, что заголовок будет скопирован корректно, а потом к файлу данных корректно будут применены журналы.
После того, как все перечисленные выше процедуры выполнены, можно копировать файлы данных средствами операционной системы – cp, rsync и другими. Включение режима резервного копирования снижает производительность базы данных: во-первых, увеличивается объём журналов, а во-вторых, если вдруг в режиме резервного копирования произойдёт сбой, восстановление будет более продолжительным, т. к. заголовки файлов данных не обновляются.
Чем быстрее резервное копирование закончится, тем лучше для базы данных, поэтому здесь уместно применение таких средств как снимок (snapshot) файловой системы или разрыв зеркала (BCV) в дисковом массиве. Одни СУБД (Oracle, PostgreSQL) оставляют администратору возможность самостоятельно выбрать способ копирования, другие (Microsoft SQL Server) предоставляют интерфейс для интеграции собственных утилит резервного копирования с механизмами файловых систем или СХД.
По окончании резервного копирования нужно перевести базу данных обратно в обычное состояние. В Oracle это делается командой ALTER DATABASE/TABLESPACE END BACKUP, в PostgreSQL – вызовом функции pg_stop_backup(), а в других базах – внутренними подпрограммами соответствующих команд или внешних сервисов.
Вот как выглядит временнáя диаграмма процесса резервного копирования:
С базами данных, использующими неизменяемые структуры данных (снимки памяти, LSM-деревья) ситуация проще. Подготовка к резервному копированию состоит из следующих шагов:
- Данные из памяти сбрасываются на диск.
- Фиксируется список файлов, попадающих в резервную копию. До тех пор, пока процесс резервного копирования не закончится, базе запрещено удалять эти файлы, даже если они становятся не нужны.
По сигналу об окончании резервного копирования база с неизменяемыми структурами снова может удалять ненужные файлы.
«холодное» сохранение файлов бд
Очевидная идея – остановить базу данных и скопировать все её файлы. Такая резервная копия называется «холодной». Способ крайне надёжный и простой, но у него есть два очевидных недостатка:
Если же «холодное» резервное копирование вас устраивает, нужно помнить что
- «холодная» копия иногда должна включать в себя и журналы. Методы определения журналов, которые должны попасть в «холодную» копию, индивидуальны для каждой СУБД. Например, в Oracle необходимо скопировать так называемые online redo, то есть фиксированное количество журнальных файлов в специальном каталоге, причём даже тогда, когда база остановлена корректно. В PostgreSQL нужно сохранить все журналы начиная с журнала, содержащего последнюю контрольную точку, информация о которой содержится в управляющем файле.
- каталог базы данных может содержать достаточно большие файлы временных табличных пространств, которые не обязательно включать в резервную копию. Кстати, это замечание верно и для «горячего» резервного копирования.
Восстановление зашифрованной базы данных из бэкапа
USE master GO OPEN MASTER KEY DECRYPTION BY PASSWORD = '123QWEasd'; GO RESTORE DATABASE MyDatabaseName FROM DISK = N'd:tempMyDatabaseNameBackup.bak' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 5;
Восстановление на точку
Резервная копия позволяет восстановить состояние базы данных на момент, когда завершилась команда возврата из режима резервного копирования. Однако авария, после которой потребуется восстановление, может произойти в любой момент. Задача восстановления состояния БД на произвольный момент называется «восстановлением на точку» (point-in-time recovery).
Чтобы обеспечить такую возможность, следует сохранять журналы БД начиная с момента окончания резервного копирования, а в процессе восстановления продолжить применять журналы к восстановленной копии. После того, как БД восстановлена из резервной копии на момент окончания копирования, состояние базы (файлов и кэшированных страниц) гарантированно корректно, поэтому особый режим журналирования не нужен. Применяя журналы до нужного момента, можно получить состояние базы данных на любую точку во времени.
Если скорость восстановления резервной копии ограничена лишь пропускной способностью диска, то скорость применения журналов обычно ограничена производительностью процессора. Если в основной базе данных изменения происходят параллельно, то при восстановлении все изменения выполняются последовательно – в порядке чтения из журнала.
Таким образом время восстановления линейно зависит от того, насколько далеко точка восстановления отстоит от точки окончания резервного копирования. Из-за этого приходится довольно часто делать полные резервные копии – минимум раз в неделю для баз с небольшой транзакционной нагрузкой и до ежедневного копирования высоконагруженных баз.
Восстановления database master key и сертификата
Эти шаги выполняютсяна сервере, где зашифрованная база данных будет восстановлена из резервной копии.
USE master;
GO
RESTORE MASTER KEY
FROM FILE = 'd:tempMyServerName_DbMasterKey'
DECRYPTION BY PASSWORD = '123QWEasd2' --password to decrypt backup
ENCRYPTION BY PASSWORD = '123QWEasd'; --password to encrypt restored Master Key in the current database.
GO
USE master;
GO
OPEN MASTER KEY DECRYPTION BY PASSWORD = '123QWEasd';
GO
CREATE CERTIFICATE MyServerName_SqlTdeMasterKeyCert
FROM FILE = 'd:tempMyServerName_SqlTdeMasterKeyCert.cer'
WITH PRIVATE KEY (FILE = 'd:tempMyServerName_SqlTdeMasterKey.pvk',
DECRYPTION BY PASSWORD = '123QWEasd3')Вручную сохранить в надежном месте секретные ключи или qr-коды
Одноразовые коды в приложении-аутентификаторе создаются на основе секретного ключа. Его генерирует сервис, когда вы включаете аутентификацию с помощью приложения. Этот ключ представляет собой случайное сочетание 16 символов, и он же закодирован в QR-коде, который сервис предлагает вам отсканировать.
В принципе, секретный ключ можно даже выучить наизусть, но проще всего будет сохранить его в каком-нибудь надежном месте. Например, для этого подойдут защищенные заметки в менеджере паролей. Альтернативный вариант представления того же секретного ключа, QR-код, можно сохранить в виде изображения и также поместить в защищенное хранилище Kaspersky Password Manager, но уже в виде картинки.
Если вам когда-нибудь понадобится восстановить аутентификатор, вы просто отсканируете приложением QR-код или введете вручную 16 символов секретного ключа.
Выгрузка данных
В наборе утилит, прилагающихся к любой СУБД, обязательно есть инструменты для выгрузки и загрузки данных. Данные сохраняются либо в текстовом формате, либо в двоичном формате, специфичном для конкретной СУБД. В таблице ниже приведён список таких инструментов:
Текстовый формат хорош тем, что его можно редактировать или даже создавать внешними программами, а двоичный в свою очередь хорош тем, что позволяет быстрее выгружать и загружать данные за счёт распараллеливания загрузки и экономии ресурсов на преобразовании форматов.
Несмотря на простоту и очевидность идеи выгрузки данных, для резервирования нагруженных промышленных баз такой метод применяют редко. Вот причины, по которым выгрузка не подходит для полноценного резервного копирования:
Тем не менее, у выгрузки есть и достоинства:
Таким образом, выгрузка используется в основном для таких задач как резервирование небольших таблиц (например, справочников) или распространение наборов данных с очередным релизом приложения.
Самым же распространённым методом резервного копирования баз данных является копирование файлов базы.
Запускаем процесс шифрования базы
USE MyDatabaseName; GO ALTER DATABASE MyDatabaseName SET ENCRYPTION ON; GO
Инкрементальное резервное копирование
Чтобы ускорить восстановление на точку, хотелось бы иметь возможность выполнять резервное копирование как можно чаще, но при этом не занимать лишнего места на дисках и не нагружать базу задачами резервного копирования.
Решение задачи – инкрементальное резервное копирование, то есть копирование только тех страниц данных, которые изменились с момента предыдущего резервного копирования.Инкрементальное резервное копирование имеет смысл только для СУБД, использующих изменяемые структуры данных.
Инкремент может отсчитываться как от полной резервной копии (кумулятивная копия), так и от любой предыдущей копии (дифференциальная копия).
К сожалению, единой терминологии не существует, и разные производители используют разные термины:
При наличии инкрементальных копий процесс восстановления на точку выглядит следующим образом:
Наличие кумулятивной копии ускоряет процесс восстановления. Так, например, для восстановления состояния базы на точку между T3 и T4 необходимо восстановить две инкрементальных копии, а для восстановления на точку после T4 – только одну.
Очевидно, что объём одной кумулятивной копии меньше, чем объём нескольких дифференциальных копий, потому что некоторые страницы изменились по несколько раз, и каждая инкрементальная копия содержит свою версию страницы.
Есть три способа создания инкрементальной копии:
- создание полной копии и вычисление разницы с предыдущей полной копией;
- разбор журналов, создание списка изменённых страниц и резервирование страниц, включённых в список;
- запрос изменённых страниц в базе данных.
Первый способ экономит дисковое пространство, но не решает задачу снижения нагрузки на базу данных. Более того, если у нас есть полная резервная копия, то превращать её в инкрементальную бессмысленно, т. к. восстановление полной копии быстрее, чем восстановление предыдущей полной копии и инкремента.
Задачу экономии дискового пространства при таком подходе лучше переложить на специальные компоненты со встроенными механизмами дедупликации. Это могут быть как специальные СХД (EMC DataDomain, HPE StorageWorks VLS, вся линейка NetApp), так и программные продукты (ZFS, Veritas NetBackup PureFile, Windows Server Data Deduplication).
Использовать облачную синхронизацию приложения-аутентифкатора
Большинство популярных приложений-аутентификаторов — за исключением Google Authenticator — предлагает возможность хранения секретных ключей в облаке и автоматической синхронизации аутентификаторов на разных устройствах. Однако в этом методе есть минус: в приложении-аутентификаторе придется завести учетную запись, а для этого обычно требуется поделиться с его создателями номером телефона или адресом электронной почты.
В случае Microsoft Authenticator можно воспользоваться учетной записью Microsoft, если она у вас есть (если нет — придется завести). Кроме того, следует иметь в виду один нюанс: Microsoft Authenticator для iOS сохраняет резервную копию в iCloud, а версия для Android — в какое-то другое не уточняемое создателями облако.
Поэтому бэкапы получаются несовместимы: если вы пользовались айфоном, но решили перейти на Android (или наоборот), то восстановить бэкап Microsoft Authenticator не получится. Придется заново заводить токены для всех аккаунтов в новой версии приложения.
Как создать резервную копию сертификата файловой системы
В случае потери или повреждения ключа шифрования при отсутствии альтернативного способа восстановления данных они будут потеряны. В случае потери или повреждения смарт-карты, на которой хранился ключ шифрования, данные также будут потеряны.
Чтобы быть уверенным, что вы всегда будете иметь доступ к зашифрованным данным, следует создать резервные копии сертификата шифрования и ключа. Если компьютером пользуются несколько пользователей или для шифрования файлов используется смарт-карта, необходимо создать сертификат восстановления файлов.
Дополнительные сведения см. Создание сертификата восстановления для зашифрованных файлов.

Примечание: Эти шаги нельзя выполнить в версиях Windows 7 Starter, Windows 7 Home Basic и Windows 7 Home Premium.
- Откройте Диспетчер сертификатов.
- На левой области дважды щелкните Личные.
- Нажмите кнопку Сертификаты.
- В главной панели выберите сертификат, который отображается в поле Файловая система с шифрованием в разделе Назначения. (Чтобы увидеть его, возможно, понадобится прокрутить содержимое папки справа.)
Если существует более одного сертификата файловой системы с шифрованием (EFS), следует создать резервную копию каждого из них.
- В меню Действие выберите пункт Все задачи и Экспорт.
- В мастере экспорта сертификатов нажмите кнопку, экспортировать закрытый ключ и нажмите кнопку Далее.
- Выберите команду Файл обмена частными сведениями, нажмите кнопку Далее.
- Введите пароль, который будет использоваться, подтвердите его и нажмите кнопку Далее. Будет создан файл, в котором хранится сертификат.
- Введите имя и расположение файла (полный путь) или нажмите кнопку Обзор и перейдите к месту, а затем введите имя файла и нажмите кнопку Сохранить.
- Нажмите кнопку Готово.
Примечание: Храните резервную копию сертификата файловой системы с шифрованием (EFS) в безопасном месте.
Резервное копирования database master key и сертификата (с закрытым ключом)
Шаги ниже используются для бэкапа Database Master Key и сертификата, чтобы потом при необходимости восстановить их перед тем, как восстанавливать зашифрованную базу данных из бэкапа.
USE master;
GO
OPEN MASTER KEY DECRYPTION BY PASSWORD = '123QWEasd';
BACKUP MASTER KEY TO FILE = 'd:tempMyServerName_DbMasterKey'
ENCRYPTION BY PASSWORD = '123QWEasd2';
GO
USE master;
GO
BACKUP CERTIFICATE MyServerName_SqlTdeMasterKeyCert
TO FILE = 'd:tempMyServerName_SqlTdeMasterKeyCert.cer'
WITH PRIVATE KEY
(FILE = 'd:tempMyServerName_SqlTdeMasterKey.pvk',
ENCRYPTION BY PASSWORD = '123QWEasd3')Создаем database master key в базе [master]
Этот ключ в дальнейшем будет использован для того, чтобы зашифровать другие ключи и сертификаты в этой базе.
USE master; GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = '123QWEasd'; GO
Создаем ключ шифрования database encryption key (dek) в базе данных
USE MyDatabaseName; GO CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_128 ENCRYPTION BY SERVER CERTIFICATE MyServerName_SqlTdeMasterKeyCert; GO
Создаем сертификат, которым будет зашифрован ключ шифрования базы данных: database encryption key (dek)
Этот сертификат будет использован для шифрации DEK, который будет расположен в шифруемой базе и которым база будет зашифрована
USE master; GO CREATE CERTIFICATE MyServerName_SqlTdeMasterKeyCert WITH SUBJECT = 'MyServerName_SqlTdeMasterKeyCert'; GO
Траблшутинг при включении tde
В некоторых случаях, процесс первоначального шифрования базы с помощью TDE может “зависнуть”. Возможно – при выполенении пре-шифровального сканирования базы. В таких случаях можно попробовать отключить сканирование и запустить шифрование заново:
DBCC TRACEON(5004) GO DBCC TRACEOFF(5004) GO ALTER DATABASE MyDatabaseName SET ENCRYPTION ON
Установить приложение-аутентификатор сразу на несколько устройств
Одноразовые коды в аутентификаторе создаются на основе секретного ключа и текущего времени. Поэтому ничто не мешает иметь одновременно несколько копий работающих приложений-аутентификаторов, которые синхронно друг с другом генерируют одинаковые коды.
В таком случае, даже если вы лишитесь аутентификатора на одном смартфоне, у вас останется запасной, полностью готовый к действию. Это могут быть даже разные приложения, — правда, в этом случае их будет не так легко и удобно синхронизировать друг с другом.
- Установить аутентификатор на несколько устройств сразу можно разными способами:
- Одновременно сканировать QR-коды (или вводить секретные ключи) двумя смартфонами.
- Отсканировать ранее сохраненные коды вторым устройством.
- Воспользоваться облачной синхронизацией в большинстве приложений (кроме Google Authenticator).
- Экспортировать токены из Google Authenticator на одном смартфоне и импортировать на втором.
Какой бы вариант вы ни выбрали, советуем не тянуть и создать резервную копию аутентификатора как можно скорее. Иначе можно в самый неподходящий момент оказаться в ситуации, когда доступ к аутентификатору утрачен, бэкапа нет, а в аккаунт нужно срочно попасть.
Шифрование резервных копий в sql server 2021
alexejs
На этот раз мы поговорим еще об одном улучшении, которое SQL Server 2021 предоставляет в плане создания резервных копий, а именно – о возможности их полноценного шифрования. Возможность защитить резервную копию паролем, чтобы с нее не могли восстановиться неположенные люди, существовала с незапамятных времен, и те, кто достаточно долго имеет дело с SQL Server, должны помнить опцию WITH PASSWORD для команды BACKUP. Однако этот способ не обеспечивал стойкую защиту, и, как отмечалось на mssqltips, Although this does add a level of security if someone really wants to crack the passwords they will find a way, so look for additional ways to secure your data . На практике для защиты резервных копий применялось появившееся в SQL Server 2008 TDE, т.е. база данных прозрачно шифровалась, прежде чем сделать из нее бэкап. Поэтому начиная с SQL Server 2021, параметры PASSWORD и MEDIAPASSWORD не используются при создании резервных копий. Восстановление резервных копий, созданных с применением пароля, остается возможным.
Тем не менее шифрование данных и шифрование резервных копий – это два разных по своему назначению сценария. Очевидно, что при отчуждении резервной копии правилом хорошего тона является ее защитить. Например, если мы переносим базу в другой ЦОД, чтобы исключить утечку в процессе передачи по каналам связи или еще как-либо. Однако шифрование влечет накладные расходы, и если база данных надежно хранится в локальном датацентре, зачем ее шифровать только для того, чтобы сделать бэкап? К счастью, в SQL Server 2021 это стали два независимых процесса. Аналогично шифрованию данных резервную копию можно зашифровать на основе сертификата или асимметричного ключа. Поддерживаются алгоритмы шифрования AES 128, AES 192, AES 256 и Triple DES.
В качестве иллюстрации я создам зашифрованную резервную копию любимой базы AdventureWorks на локальном SQL Server 2021 CTP2 и восстановлюсь с нее в облачной виртуалке.
Для защиты резервной копии требуется создать шифратор: асимметричный ключ или сертификат, – каковой затем передать на целевой SQL Server, где будет происходить восстановление. Для этого шифратор нужно экспортировать из исходного экземпляра SQL Server и импортировать на целевой. С сертификатами в этом плане проблем нет. С асимметричными ключами сложнее. Учитывая, что команды BACKUP ASYMMETRIC KEY до сих пор не появилось, и создать дубликат асимметричного ключа в отличие от симметричного тоже нельзя, единственный разумный способ видится в том, чтобы создать асимметричный ключ вне SQL Server, например, при помощи утилиты sn.exe, затащить его внутрь, как CREATE ASYMMETRIC KEY… FROM FILE = ‘….snk’, зашифровать им бэкап на экземпляре-исходнике, из этого же snk-файла создать асимметричный ключ на экземпляре-назначении, на котором и восстановить зашифрованный бэкап. Чтобы не геморроиться с асимметричными ключами, в данном примере будем использовать сертификат, поскольку идейно это та же пара открытый/закрытый ключ.
Создадим серверный сертификат, который будет использоваться для шифрования бэкапа.
use master if exists (select 1 from sys.certificates where name = 'СертификатДляБэкапа') drop certificate СертификатДляБэкапа create certificate СертификатДляБэкапа with subject = 'Это действительно сертификат для бэкапа' Скрипт 1
Поскольку никакого ENCRYPTION BY мы не указали, это означает, что сертификат будет защищен мастер-ключом базы, что, собственно, и требуется. Только сертификаты, подписаные мастер-ключом, годны для шифрования бэкапов. Если защитить сертификат, например, паролем (ENCRYPTION BY PASSWORD = ‘Оч.сложный пароль’),
при попытке зашифровать им бэкап выскочит ошибка Cannot use certificate ‘TestCert’, because its private key is not present or it is not protected by the database master key.
Зашифрованный бэкап, как и обычный, можно создавать традиционно на диск или в Azure Storage. Чтобы не заморачиваться с передачей файла бэкапа, воспользуемся вторым способом, который мы разбирали в заметке <a href=”habrahabr.ru/company/microsoft/blog/202168/>Создание резервных копий БД SQL Server 2021 CTP2 в Windows Azure.
if exists (select 1 from sys.credentials where name = 'КреденцияДляАзуровскогоСториджа') drop credential КреденцияДляАзуровскогоСториджа create credential КреденцияДляАзуровскогоСториджа with identity= 'bakstorage' , secret = '<первичный или вторичный ключ доступа к учетной записи хранения, посмотреть которые можно в ее конфигурации>' backup database AdventureWorks to url = 'http://bakstorage.blob.core.windows.net/container1/AdventureWorks2.bak' with credential = 'КреденцияДляАзуровскогоСториджа' , format, compression, stats = 10 , encryption (algorithm = aes_256, server certificate = СертификатДляБэкапа) Скрипт 2

Рис.1
Если вы уже делали бэкап с тем же именем в тот же контейнер, вы можете получить при этом ошибку (412) There is currently a lease on the blob and no lease ID was specified in the request… Это происходит потому, что при создании или восстановлении резервной копии Windows Azure выдает SQL Server бесконечную аренду (lease) для блокировки монопольного доступа к блобу. После успешного завершения процесса резервного копирования или восстановления аренда снимается. Но если оно заканчивается неудачей или происходит сбой с сетью или еще что-то пошло не так, аренда остается висеть, препятствуя перезаписи бэкапного блоба или его удаления. Скрипт PowerShell для удаления блоба с активной арендой приводится здесь. Я поступлю проще. Поскольку в содержащем бэкап контейнере больше ничего нет, я удалю и пересоздам контейнер. Если контейнер пересоздается с тем же именем, необходимо иметь в виду, что Windows Azure потребуется пара минут сообразить, что имя освободилось.
То же можно выполнить в графическом интерфейсе SSMS:

Рис.2

Рис.3
По выполнении команды Скрипт 2 в заказанном контейнере образуется блоб с бэкапом:

Рис.4
Разумеется, шифрование бэкапов полностью применимо при создании резервной копии БД не в Облако, а в традиционный локальный файл. Для этого первую строчку команды backup database (Скрипт 2) следует изменить на
backup database AdventureWorks to disk = 'c:TempAdventureWorks.bak' ...
Этот файл должен увидеться с того экземпляра SQL Server, на котором мы его планируем восстановить. В нашем случае это SQL Server на облачной виртуалке. Можно скопировать на нее файл с резервной копией, либо выложить его в Azure Storage, разделив backup database… to url на два шага: backup database… to disk с последующей загрузкой бэкапа в блобовский контейнер. Загрузку можно сделать руками из Visual Studio 2021 / 2021 (Server Explorer), на которую предварительно требуется установить Azure SDK.

Рис.5
Однако необходимо иметь в виду, что команда restore database… from url (непосредственное восстановление базы из Azure Storage) может производиться только если данный бэкап тоже производился в Storage. Если бэкап делался на диск, а затем переносился как облачный блоб, то и на сервере назначения его необходимо будет сначала превратить в файл и восстанавливаться как restore database… from disk.
Теперь независимо от способа создания резервной копии заходим на SQL Server назначения, в нашем случае установленный на виртуальной машине в Windows Azure. Это можно сделать через удаленный рабочий стол или подключиться к нему из локальной SSMS, как описывалось здесь.

Рис.6
Где 5555 – публичный ТСР-порт в конечной точке облачной виртуалки, соответствующий 1433

Рис.7
предварительно открытому в Windows Firewall облачной виртуалки

Рис.8
Повторяем на нем создание креденции для азуровского сториджа аналогично первой части Скрипт 2:
if exists (select 1 from sys.credentials where name = N'КреденцияДляАзуровскогоСториджа') drop credential КреденцияДляАзуровскогоСториджа create credential КреденцияДляАзуровскогоСториджа with identity= 'bakstorage' ...
и пытаемся восстановиться
restore database AdventureWorks from url = 'http://bakstorage.blob.core.windows.net/container1/AdventureWorks.bak' with replace, stats = 10, credential = 'AzureStorageCredential' Скрипт 4
Напомню, что если этот бэкап делался на диск, а потом загружался в Azure Storage, его необходимо опять представить в виде bak-файла и выполнять restore database AdventureWorks from disk.
В обоих случаях получаем, натурально, отлуп, поскольку бэкап зашифрованMsg 33111, Level 16, State 3, Line 5 Cannot find server certificate with thumbprint '0х...'. Msg 3013, Level 16, State 1, Line 5 RESTORE DATABASE is terminating abnormally.
Кроме бэкапа на сервер назначения требуется передать секрет, при помощи которого он шифровался. Для сертификатов в отличие от асимметричных ключей предусмотрены команды backup/restore certificate. Как и в случае TDE, сертификат бэкапа на исходном экземпляре нужно экспортировать вместе с закрытым ключом, иначе выскочит ошибка:Msg 15507, Level 16, State 30, Line 5 A key required by this operation appears to be corrupted. Msg 3013, Level 16, State 1, Line 5 RESTORE DATABASE is terminating abnormally.
backup certificate СертификатДляБэкапа to file = 'c:TempBackupCert.cer' with private key (file = 'c:TempBackupCert.pvk', encryption by password = 'Abra@Cadabra') Скрипт 4
передаем файлы .cer и .pvk на сервер назначения и создаем на нем сертификат для восстановления из бэкапа. Поскольку виртуалка свежая, предварительно требуется создать мастер-ключ БД master. Пароль, которым он защищается, не имеет ничего общего с паролями мастер-ключа на исходном сервере. Чтобы не отвлекаться на рассказ, какие ключи/сертификаты и как передавать с SQL Server на SQL Server при передаче защищенного контента, рекомендую статью Migrating SQL Server Databases that use Database Master Keys.
use master create master key encryption by password = 'Passw0rd1' if exists (select 1 from sys.certificates where name = N'СертификатДляБэкапа') drop certificate СертификатДляБэкапа create certificate СертификатДляБэкапа from file = 'c:TempBackupCert.cer' with private key (file = 'c:TempBackupCert.pvk', decryption by password = 'Abra@Cadabra') Скрипт 5
После чего повторяем команду восстановления базы и видим, что теперь она завершается успешно:
restore database AdventureWorks from disk = 'd:TempAdventureWorks.bak' with move 'AdventureWorks2021_Data' to 'C:Program FilesMicrosoft SQL ServerMSSQL12.MSSQLSERVERMSSQLDATAAdvnetureWorks_Data.mdf', move 'AdventureWorks2021_Log' to 'C:Program FilesMicrosoft SQL ServerMSSQL12.MSSQLSERVERMSSQLDATAAdvnetureWorks_Log.ldf', replace, stats = 10 Скрипт 6

Рис.9
Ссылки по теме
Экспортировать сертификат и ключ полученный через win-acme | блог сисадмина
Есть такая полезная утилита — win-acme, с помощью которой под Windows можно обновлять сертификат Let’s Encrypt.
Так вот, при обновлении сертификата он нормально устанавливается на Exchange Server, устанавливается в хранилище (Сертификаты — Размещение веб-служб), но при этом закрытый ключ нельзя экспортировать:
Как получить закрытый ключ и возможность экспорта:
- Запускаем wacs, выбираем A (Manage Renewals)

- D (Show details for renewal)

Копируем .pfx password. - Идем в папку C:ProgramDatawin-acmeacme-v02.api.letsencrypt.orgCertificates

- Тут лежат .PFX и .PEM файлы, которые нам нужны. Можно их скопировать прямо отсюда, либо импортировать PFX локально с возможностью экспорта. А если нужны отдельно ключ и сертификат (для установки не на Windows Server например), тогда идём дальше.
- Конвертировать PFX в .key и .cer можно с помощью программы OpenSSL (для windows).
- Устанавливаем, запускаем, переходим в папку например C:cert, куда предварительно скопируем наш .PFX файл.
- Запускаем команду:
C:cert>openssl pkcs12 -in c:certcert.pfx -nocerts -out private.key -nodes
Enter Import Password:
Вводим пароль, скопированный в п.4 выше, получаем файл ключа private.key в той же папке, откуда запускали openssl (C:cert) - Далее нужно открыть этот файл в блокноте и оставить только содержимое между
——BEGIN PRIVATE KEY—— и ——END PRIVATE KEY—— - Чтобы получить сертификат, вводим команду
C:cert>openssl pkcs12 -in c:certcert.pfx -clcerts -nokeys -out public.cer
Enter Import Password: - Получаем public.cer. Также в блокноте удаляем всё лишнее.
Экспортировать уже заведенные в аутентификаторе токены
По какой-то совершенно непонятной причине функция экспорта и импорта уже заведенных в приложение токенов есть только в одном аутентификаторе из всех, которые мы проверили, — это Google Authenticator.
Вероятно, разработчики других приложений считают, что их облачная синхронизация эту функцию успешно заменяет. Отчасти это так. Но облако никак не поможет тем, кто уже пользуется Google Authenticator и хотел бы попробовать альтернативу, быстренько перенеся уже имеющиеся токены в новое приложение. Почему-то создатели альтернативных аутентификаторов совершенно не пытаются упростить жизнь таким «перебежчикам».
Так или иначе, в Google Authenticator сохранять токены очень легко и удобно: достаточно нажать на три точки в верхней части экрана, выбрать «Экспорт аккаунтов» и отметить нужные учетные записи. После этого на экране появится огромный QR-код, в котором содержатся все выбранные токены сразу. Остается просто сделать скриншот и сохранить картинку в защищенном хранилищеменеджера паролей.
