Миграция сертификата защищенной TDE базы данных в Управляемый экземпляр SQL Azure

Применимо к:Управляемый экземпляр SQL Azure

При миграции базы данных, защищенной с помощью прозрачного шифрования данных (TDE), в Управляемый экземпляр SQL Azure с использованием параметра "Собственное восстановление" необходимо перед восстановлением базы данных перенести соответствующий сертификат из экземпляра SQL Server. В этой статье рассматривается процесс миграции сертификата в Управляемый экземпляр SQL Azure вручную.

  • Экспортируйте сертификат в файл обмена личной информацией (.pfx)
  • Извлеките сертификат из файла в строку формата base-64
  • Загрузите его с помощью командлета PowerShell

Альтернативный вариант — это использование полностью управляемой службы для плавной миграции как защищенной TDE базы данных, так и соответствующего сертификата. Дополнительные сведения см. в разделе Перенос локальной базы данных в Управляемый экземпляр базы данных SQL Azure с помощью Azure Database Migration Service.

Важно!

Перенесенный сертификат используется только для восстановления базы данных, защищенной TDE. Вскоре после восстановления перенесенный сертификат заменяется другим предохранителем, либо управляемым службой сертификатом, либо асимметричным ключом из хранилища ключей в зависимости от типа TDE, установленного в экземпляре.

Необходимые компоненты

Чтобы выполнить действия, описанные в этой статье, необходимо следующее.

  • Средство командной строкиPvk2Pfx, установленное на локальном сервере или другом компьютере с доступом к сертификату, экспортированному как файл. Средство Pvk2Pfx является частью набора драйверов Windows Enterprise, изолированной среды командной строки.
  • Windows PowerShell версии 5.0 или более поздней.

Вам потребуются:

Примечание.

В этой статье предусмотрено использование модуля Azure Az PowerShell, который является рекомендуемым модулем PowerShell для взаимодействия с Azure. Чтобы начать работу с модулем Az PowerShell, ознакомьтесь со статьей Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Важно!

Модуль PowerShell Azure Resource Manager по-прежнему поддерживается Управляемым экземпляром SQL Azure, но вся будущая разработка сосредоточена на модуле Az.Sql. Сведения об этих командлетах см. в разделе AzureRM.Sql. Аргументы команд в модулях Az и AzureRM практически идентичны.

Выполните следующие команды в PowerShell, чтобы установить или обновить модуль PowerShell.

Install-Module -Name Az.Sql
Update-Module -Name Az.Sql

Экспорт сертификата TDE в PFX-файл

Сертификат можно экспортировать непосредственно из исходного экземпляра SQL Server или из хранилища сертификатов, если он хранится там.

Экспорт сертификата из исходного экземпляра SQL Server

Следуйте инструкциям ниже, чтобы экспортировать сертификат с помощью SQL Server Management Studio и преобразовать его в формат .pfx. В следующих шагах используются универсальные имена TDE_Cert и full_path для имен сертификата и файла и путей. Их должны заменить фактические имена.

  1. В среде SSMS откройте новое окно запроса и подключитесь к исходному экземпляру SQL Server.

  2. Используйте следующий сценарий, чтобы перечислить защищенные TDE базы данных и получите имя сертификата, защищающего шифрование базы данных, которые подлежат миграции.

    USE master
    GO
    SELECT db.name as [database_name], cer.name as [certificate_name]
    FROM sys.dm_database_encryption_keys dek
    LEFT JOIN sys.certificates cer
    ON dek.encryptor_thumbprint = cer.thumbprint
    INNER JOIN sys.databases db
    ON dek.database_id = db.database_id
    WHERE dek.encryption_state = 3
    

    List of TDE certificates

  3. Выполните следующее действие, чтобы экспортировать сертификат в пару файлов (.cer и .pvk), сохраняя данные открытого и закрытого ключа.

    USE master
    GO
    BACKUP CERTIFICATE TDE_Cert
    TO FILE = 'c:\full_path\TDE_Cert.cer'
    WITH PRIVATE KEY (
      FILE = 'c:\full_path\TDE_Cert.pvk',
      ENCRYPTION BY PASSWORD = '<SomeStrongPassword>'
    )
    

    Backup TDE certificate

  4. Используйте консоль PowerShell для копирования сведений о сертификате из пары недавно созданных файлов в файл обмена личной информацией (PFX) с помощью средства Pvk2Pfx.

    .\pvk2pfx -pvk c:/full_path/TDE_Cert.pvk  -pi "<SomeStrongPassword>" -spc c:/full_path/TDE_Cert.cer -pfx c:/full_path/TDE_Cert.pfx
    

Экспорт сертификата из хранилища сертификатов

Если сертификат хранится в хранилище сертификатов локального компьютера SQL Server, его можно экспортировать, выполнив следующие действия.

  1. Чтобы открыть оснастку диспетчера сертификатов консоли управления Microsoft Management Console, откройте консоль PowerShell и выполните следующую команду.

    certlm
    
  2. В оснастке MMC для сертификатов разверните путь "Личное > Сертификаты", чтобы просмотреть список сертификатов.

  3. Щелкните правой кнопкой мыши сертификат и щелкните команду Экспорт.

  4. Следуйте инструкциям мастера по экспорту сертификата и закрытого ключа в формате .pfx.

Отправьте сертификат в Управляемый экземпляр SQL Azure с помощью командлета Azure PowerShell

  1. Начните с шагов подготовки в PowerShell.

    # import the module into the PowerShell session
    Import-Module Az
    # connect to Azure with an interactive dialog for sign-in
    Connect-AzAccount
    # list subscriptions available and copy id of the subscription target the managed instance belongs to
    Get-AzSubscription
    # set subscription for the session
    Select-AzSubscription <subscriptionId>
    
  2. После выполнения всех этапов подготовки выполните следующие команды для передачи сертификата с кодировкой base-64 в целевой управляемый экземпляр.

    # If you are using PowerShell 6.0 or higher, run this command:
    $fileContentBytes = Get-Content 'C:/full_path/TDE_Cert.pfx' -AsByteStream
    # If you are using PowerShell 5.x, uncomment and run this command instead of the one above:
    # $fileContentBytes = Get-Content 'C:/full_path/TDE_Cert.pfx' -Encoding Byte
    $base64EncodedCert = [System.Convert]::ToBase64String($fileContentBytes)
    $securePrivateBlob = $base64EncodedCert  | ConvertTo-SecureString -AsPlainText -Force
    $password = "<password>"
    $securePassword = $password | ConvertTo-SecureString -AsPlainText -Force
    Add-AzSqlManagedInstanceTransparentDataEncryptionCertificate -ResourceGroupName "<resourceGroupName>" `
        -ManagedInstanceName "<managedInstanceName>" -PrivateBlob $securePrivateBlob -Password $securePassword
    

Теперь сертификат доступен для указанного управляемого экземпляра, и может быть успешно восстановлена резервная копия соответствующей базы данных, защищенной TDE.

Примечание.

Отправленный сертификат не отображается в представлении каталога sys.certificates. Чтобы подтвердить успешную отправку сертификата, можно выполнить команду RESTORE FILELISTONLY .

Следующие шаги

В этой статье описан перенос сертификата, защищающего ключ шифрования базы данных с помощью прозрачного шифрования данных, из локального или IaaS-экземпляра SQL Server в Управляемый экземпляр SQL Azure.

Узнайте, как восстановить резервную копию базы данных в Управляемый экземпляр SQL Azure, чтобы узнать, как восстановить резервную копию базы данных в Управляемый экземпляр SQL Azure.