適用対象:Azure SQL Managed Instance
この記事では、ネイティブ復元オプションを使用して TDE で保護された SQL Server データベースを Azure SQL Managed Instance に移行する前に、証明書を移行する方法について説明します。
ネイティブ復元オプションを使用して Transparent Data Encryption (TDE) によって保護されたデータベースを SQL Server から Azure SQL Managed Instance に移行する場合は、まず対応する証明書を移行してから、データベースを SQL マネージド インスタンスに復元する必要があります。
または、フル マネージド の Azure Database Migration Service を使用して、TDE で保護されたデータベースと対応する証明書の両方をシームレスに移行することもできます。
この記事では、SQL Server から Azure SQL Managed Instance にデータベースを移行することに重点を置いています。 SQL マネージド インスタンス間でデータベースを移動するには、次を参照してください。
前提条件
この記事の手順を完了するには、次の前提条件を満たす必要があります。
- ファイルとしてエクスポートされた証明書にアクセス可能なオンプレミス サーバーまたは他のコンピューターへの Pvk2Pfx コマンドライン ツールのインストール。 Pvk2Pfx ツールは、自己完結型コマンドライン環境である Enterprise Windows Driver Kit に含まれています。
- Windows PowerShell バージョン 5.0 以上のインストール。
次の前提条件を満たしていることを確認します。
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 は、証明書名、ファイル名、パスのプレースホルダーです。 実際の名前に置き換えます。
SSMS で、新しいクエリ ウィンドウを開いてソース SQL Server インスタンスに接続します。
次のスクリプトを使用することで、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次のスクリプトを実行して証明書を 1 組のファイル (.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>' )PowerShell コンソールを使用して、Pvk2Pfx ツールを使用して、新しく作成されたファイルのペアから .pfx ファイルに証明書情報をコピーします。
.\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 ローカル コンピューターの証明書ストアに証明書を保持する場合は、次の手順に従って証明書をエクスポートします。
PowerShell コンソールを開き、次のコマンドを実行して、Microsoft 管理コンソールの証明書スナップインを開きます。
certlm証明書 MMC スナップインで、 パス Personal>Certificates を展開して証明書の一覧を表示します。
証明書を右クリックし、[エクスポート] を選択 します。
ウィザードに従って、証明書と秘密キーを .pfx 形式にエクスポートします。
Azure PowerShell コマンドレットを使用して証明書を Azure SQL Managed Instance にアップロードする
重要
移行された証明書は、TDE で保護されたデータベースを復元する場合にのみ使用します。 復元が完了するとすぐに、移行された証明書は別の保護機能に置き換えられます。 新しい保護機能は、インスタンスに設定した TDE の種類に応じて、サービスで管理される証明書またはキー コンテナーの非対称キーです。
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>すべての準備手順を完了したら、次のコマンドを実行して、base-64 でエンコードされた証明書をターゲット SQL マネージド インスタンスにアップロードします。
# 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
指定した SQL マネージド インスタンスで証明書を使用できるようになり、対応する TDE で保護されたデータベースのバックアップを復元できます。
注
アップロードされた証明書は、 sys.certificates カタログ ビューには表示されません。 証明書のアップロードが成功したことを確認するには、 RESTORE FILELISTONLY コマンドを実行してください。