別の SQL Server への TDE で保護されたデータベースの移動

このトピックでは、透過的なデータ暗号化 (TDE) を使用して SQL Server データベースを保護し、そのデータベースを別の SQL Server インスタンスに移動する手順について説明します。

このトピックの内容

  • 作業を開始する前に:

    背景情報

    セキュリティ

  • 例:

    透過的なデータ暗号化で保護されたデータベースを作成するには

    TDE で保護されたデータベースを新しい SQL Server インスタンスに移動するには

  • 補足情報: TDE で保護されたデータベースを新しい SQL Server インスタンスに移動した後に実行する手順

背景情報

TDE では、データとログ ファイルの暗号化および暗号化解除がリアルタイムの I/O で実行されます。暗号化にはデータベース暗号化キー (DEK) が使用されます。これは、復旧時に使用できるようにデータベース ブート レコードに保存されます。DEK とは、サーバーの master データベースに保存されている証明書を使用して保護される対称キー、または EKM モジュールによって保護される非対称キーのことです。TDE で保護されたデータベースを移動するとき、DEK を開くために使用される証明書または非対称キーも移動する必要があります。この証明書または非対称キーは、SQL Server からデータベース ファイルにアクセスできるように、移動先サーバーの master データベースにインストールする必要があります。詳細については、「透過的なデータ暗号化 (TDE) について」を参照してください。

セキュリティ

権限

データベース マスター キーを作成するには、master データベースに対する CONTROL DATABASE 権限が必要です。

DEK を保護する証明書を作成するには、master データベースに対する CREATE CERTIFICATE 権限が必要です。

暗号化されたデータベースに対する CONTROL DATABASE 権限、およびデータベース暗号化キーの暗号化に使用する証明書または非対称キーに対する VIEW DEFINITION 権限が必要です。

[先頭に戻る]

TDE で保護されたデータベースの作成

透過的なデータ暗号化で保護されたデータベースを作成するには、master データベースに保存されている証明書で保護されたデータベース暗号化キーを使用します。

透過的なデータ暗号化で保護されたデータベースを作成するには

  1. クエリ エディターで、次の Transact-SQL コマンドを入力して、master データベースにデータベース マスター キーと証明書を作成します。

    セキュリティに関する注意セキュリティに関する注意

    アスタリスクの代わりにパスワードを入力します。空白のパスワードは使用しないでください。強力なパスワードを使用してください。

    USE master ;
    GO
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '**************';
    GO
    CREATE CERTIFICATE TestSQLServerCert 
    WITH SUBJECT = 'Certificate to protect TDE key'
    GO
    
    USE master ;
    GO
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '**************';
    GO
    CREATE CERTIFICATE TestSQLServerCert 
    WITH SUBJECT = 'Certificate to protect TDE key'
    GO
    
  2. master データベースに、サーバー証明書のバックアップを作成します。データベース暗号化キーの保護に使用する証明書が失われると、TDE で保護されたデータベース内のデータにアクセスできなくなります。次の例では、この SQL Server インスタンスに関する既定のデータの場所 (C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA) に、証明書と秘密キー ファイルのバックアップを保存します。

    セキュリティに関する注意セキュリティに関する注意

    証明書を復元するために、証明書ファイルと秘密キー ファイルの両方のコピーを保持する必要があります。秘密キーのパスワードは、データベース マスター キーのパスワードと同じにする必要はありません。

    BACKUP CERTIFICATE TestSQLServerCert 
    TO FILE = 'TestSQLServerCert'
    WITH PRIVATE KEY 
    (
        FILE = 'SQLPrivateKeyFile',
        ENCRYPTION BY PASSWORD = '**************'
    );
    GO
    
    BACKUP CERTIFICATE TestSQLServerCert 
    TO FILE = 'TestSQLServerCert'
    WITH PRIVATE KEY 
    (
        FILE = 'SQLPrivateKeyFile',
        ENCRYPTION BY PASSWORD = '**************'
    );
    GO
    
  3. TDE で保護するデータベースを作成します。

    CREATE DATABASE CustRecords ;
    GO
    
    CREATE DATABASE CustRecords ;
    GO
    
  4. 新しいデータベースに切り替えます。master データベース内のサーバー証明書によって保護されるデータベース暗号化キーを作成します。次に、TDE を使用してデータベースを暗号化するように、新しいデータベースを変更します。

    USE CustRecords;
    GO
    CREATE DATABASE ENCRYPTION KEY
    WITH ALGORITHM = AES_128
    ENCRYPTION BY SERVER CERTIFICATE TestSQLServerCert;
    GO
    ALTER DATABASE CustRecords
    SET ENCRYPTION ON;
    GO
    
    USE CustRecords;
    GO
    CREATE DATABASE ENCRYPTION KEY
    WITH ALGORITHM = AES_128
    ENCRYPTION BY SERVER CERTIFICATE TestSQLServerCert;
    GO
    ALTER DATABASE CustRecords
    SET ENCRYPTION ON;
    GO
    
    注意

    SQL Server Management Studio を使用してこの手順を実行するには、オブジェクト エクスプローラーでデータベースを右クリックし、[タスク] をポイントして、[データベース暗号化の管理] をクリックします。[データベース暗号化の管理] ダイアログ ボックスを使用して、データベース暗号化キーを選択し、データベース暗号化をオンに設定します。

  5. 単純なテーブルを作成します。テーブルにデータを入力し、テーブルからデータを選択してデータベースをテストします。

    CREATE TABLE CustomerRecord
        (CustomerID int PRIMARY KEY,
        SecretData nvarchar(100) NOT NULL) ;
    GO
    INSERT CustomerRecord (CustomerID,SecretData)
    VALUES (23997, 'Plain text data') ;
    GO
    SELECT CustomerID, SecretData FROM CustomerRecord ;
    GO
    
    CREATE TABLE CustomerRecord
        (CustomerID int PRIMARY KEY,
        SecretData nvarchar(100) NOT NULL) ;
    GO
    INSERT CustomerRecord (CustomerID,SecretData)
    VALUES (23997, 'Plain text data') ;
    GO
    SELECT CustomerID, SecretData FROM CustomerRecord ;
    GO
    

[先頭に戻る]

TDE で保護されたデータベースの移動

TDE で保護されたデータベースを新しい SQL Server インスタンスに移動するには

  1. TDE で保護されたデータベースを移動元サーバーからデタッチします。

    USE master ;
    GO
    EXEC master.dbo.sp_detach_db @dbname = N'CustRecords';
    GO
    
    USE master ;
    GO
    EXEC master.dbo.sp_detach_db @dbname = N'CustRecords';
    GO
    
    注意

    Management Studio を使用してこの手順を実行するには、オブジェクト エクスプローラーでデータベースを右クリックし、[タスク] をポイントして、[デタッチ] をクリックします。[OK] をクリックします。

  2. エクスプローラーを使用して、移動元またはコピー元サーバーから移動先またはコピー先サーバーの同じ場所に、データベース ファイルを移動またはコピーします。

    注意

    通常、2 つのデータベース ファイル (CustomerRecords.mdfCustomerRecords_log.LDF) は、既定の場所である C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA に保存されます。ただし、ファイル名と場所は異なる場合があります。

  3. エクスプローラーを使用して、移動元またはコピー元サーバーから移動先またはコピー先サーバーの同じ場所に、サーバー証明書と秘密キー ファイルのバックアップを移動またはコピーします。この例では、これらのファイルは、C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA にある既定のデータ フォルダーに保存されます。

  4. 移動先またはコピー先の SQL Server インスタンスに、データベース マスター キーを作成します。パスワードは、移動元またはコピー元サーバーと同じにする必要はありません。

    USE master;
    GO
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '**************';
    GO
    
    USE master;
    GO
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '**************';
    GO
    
  5. 元のサーバー証明書のバックアップ ファイルを使用して、サーバー証明書を再作成します。パスワードは、バックアップの作成時に使用したパスワードと同じである必要があります。

    CREATE CERTIFICATE TestSQLServerCert 
    FROM FILE = 'TestSQLServerCert'
    WITH PRIVATE KEY 
    (
        FILE = 'SQLPrivateKeyFile',
        DECRYPTION BY PASSWORD = '**************'
    );
    GO
    
    CREATE CERTIFICATE TestSQLServerCert 
    FROM FILE = 'TestSQLServerCert'
    WITH PRIVATE KEY 
    (
        FILE = 'SQLPrivateKeyFile',
        DECRYPTION BY PASSWORD = '**************'
    );
    GO
    
  6. 移動するデータベースをアタッチします。データベース ファイルのパスは、データベース ファイルを保存した場所にする必要があります。

    CREATE DATABASE [CustRecords] ON 
    ( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\CustRecords.mdf' ),
    ( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\CustRecords_log.LDF' )
    FOR ATTACH ;
    GO
    
    CREATE DATABASE [CustRecords] ON 
    ( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\CustRecords.mdf' ),
    ( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\CustRecords_log.LDF' )
    FOR ATTACH ;
    GO
    
    注意

    Management Studio を使用してこの手順を実行するには、オブジェクト エクスプローラーで [データベース] を右クリックし、[アタッチ] をクリックします。[追加] をクリックし、CustRecords.mdf ファイルを探して選択し、[OK] をクリックします。

  7. テーブルからデータを選択して、データベースへのアクセスをテストします。

    USE CustRecords ;
    GO
    SELECT CustomerID, SecretData FROM CustomerRecord ;
    GO
    
    USE CustRecords ;
    GO
    SELECT CustomerID, SecretData FROM CustomerRecord ;
    GO
    

    [先頭に戻る]

補足情報: TDE で保護されたデータベースを新しい SQL Server インスタンスに移動した後に実行する手順

master データベースのバックアップ

  • 証明書のインストールとデータベースのアタッチによって、master データベース内の情報が変更されています。master データベースの新しいバックアップを作成する必要があります。

[先頭に戻る]