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

このトピックでは、SQL Server Management Studio または Transact-SQL を使用して、透過的なデータ暗号化 (TDE) によってデータベースを保護し、そのデータベースを別の SQL Server インスタンスに移動する方法について説明します。 TDE では、データとログ ファイルの暗号化および暗号化解除がリアルタイムの I/O で実行されます。 暗号化にはデータベース暗号化キー (DEK) が使用されます。これは、復旧時に使用できるようにデータベース ブート レコードに保存されます。 DEK とは、サーバーの master データベースに保存されている証明書を使用して保護される対称キー、または EKM モジュールによって保護される非対称キーのことです。

このトピックの内容

  • 作業を開始する準備:

    制限事項と制約事項

    セキュリティ

  • 透過的なデータ暗号化で保護されたデータベースを作成する方法:

    SQL Server Management Studio

    Transact-SQL

  • データベースを移動する方法:

    SQL Server Management Studio

    Transact-SQL

作業を開始する準備

制限事項と制約事項

  • TDE で保護されたデータベースを移動するとき、DEK を開くために使用される証明書または非対称キーも移動する必要があります。 この証明書または非対称キーは、SQL Server からデータベース ファイルにアクセスできるように、移動先サーバーの master データベースにインストールする必要があります。 詳細については、「透過的なデータ暗号化 (TDE)」を参照してください。

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

  • SQL Server は、既定では、ここで作成されたファイルを C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA に保存します。 ただし、ファイル名と場所は異なる場合があります。

セキュリティ

権限

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

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

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

[トップに戻る] リンクで使用される矢印アイコン[Top]

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

SQL Server Management Studio の使用

  1. データベース マスター キーと証明書を master データベース内に作成します。 詳細については、「Transact-SQL」を参照してください。

  2. master データベースに、サーバー証明書のバックアップを作成します。 詳細については、「Transact-SQL」を参照してください。

  3. オブジェクト エクスプローラーで、[データベース] フォルダーを右クリックし、[新しいデータベース] をクリックします。

  4. [新しいデータベース] ダイアログ ボックスで、[データベース名] ボックスに新しいデータベースの名前を入力します。

  5. [所有者] ボックスに新しいデータベースの所有者を入力します。 または、省略記号 [...] をクリックして [データベース所有者の選択] ダイアログ ボックスを開きます。 新しいデータベースの作成の詳細については、「データベースの作成」を参照してください。

  6. オブジェクト エクスプローラーで、プラス記号をクリックして [データベース] フォルダーを展開します。

  7. 作成したデータベースを右クリックし、[タスク] をポイントし、[データベース暗号化の管理] をクリックします。

    [データベース暗号化の管理] ダイアログ ボックスでは、次のオプションを使用できます。

    • [暗号化アルゴリズム]
      データベース暗号化で使用するアルゴリズムを表示または設定します。 既定の暗号化アルゴリズムは AES128 です。 このフィールドを空白にすることはできません。 暗号化アルゴリズムの詳細については、「暗号化アルゴリズムの選択」を参照してください。

    • サーバー証明書の使用
      証明書によって保護するように暗号化を設定します。 一覧から選択します。 サーバー証明書に対する VIEW DEFINITION 権限がない場合、このリストは空になります。 証明書による暗号化方法が選択されている場合、この値を空にすることはできません。 証明書の詳細については、「SQL Server の証明書と非対称キー」を参照してください。

    • [サーバー非対称キーの使用]
      暗号化が非対称キーで保護されるように設定します。 使用可能な非対称キーのみが表示されます。 TDE を使用してデータベースを暗号化できるのは、EKM モジュールによって保護される非対称キーだけです。

    • [データベース暗号化をオンに設定]
      データベースを変更して TDE をオンまたはオフにします。

  8. 完了したら、[OK] をクリックします。

Transact-SQL の使用

  1. オブジェクト エクスプローラーで、データベース エンジンのインスタンスに接続します。

  2. [標準] ツール バーの [新しいクエリ] をクリックします。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、[実行] をクリックします。

    -- Create a database master key and a certificate in the master database.
    USE master ;
    GO
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '*rt@40(FL&dasl1';
    GO
    CREATE CERTIFICATE TestSQLServerCert 
    WITH SUBJECT = 'Certificate to protect TDE key'
    GO
    -- Create a backup of the server certificate in the master database.
    -- The following code stores the backup of the certificate and the private key file in the default data location for this instance of SQL Server 
    -- (C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA).
    
    BACKUP CERTIFICATE TestSQLServerCert 
    TO FILE = 'TestSQLServerCert'
    WITH PRIVATE KEY 
    (
        FILE = 'SQLPrivateKeyFile',
        ENCRYPTION BY PASSWORD = '*rt@40(FL&dasl1'
    );
    GO
    -- Create a database to be protected by TDE.
    CREATE DATABASE CustRecords ;
    GO
    -- Switch to the new database.
    -- Create a database encryption key, that is protected by the server certificate in the master database. 
    -- Alter the new database to encrypt the database using 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
    

詳細については、以下のトピックを参照してください。

[トップに戻る] リンクで使用される矢印アイコン[Top]

データベースを移動するには

SQL Server Management Studio の使用

  1. オブジェクト エクスプローラーで、暗号化したデータベースを右クリックし、[タスク] をポイントして [デタッチ] をクリックします。

    [データベースのデタッチ] ダイアログ ボックスでは、次のオプションを使用できます。

    • [デタッチするデータベース]
      デタッチするデータベースを一覧表示します。

    • [データベース名]
      デタッチするデータベースの名前を表示します。

    • [接続の削除]
      指定したデータベースへの接続を切断します。

      注意

      アクティブな接続があるデータベースをデタッチすることはできません。

    • [統計の更新]
      既定では、データベースをデタッチしても、古い最適化統計情報が保持されます。既存の最適化統計情報を更新するには、このチェック ボックスをオンにします。

    • [フルテキスト カタログの保持]
      既定では、デタッチ操作を行っても、データベースに関連付けられたフルテキスト カタログが保持されます。 これらのカタログを削除するには、[フルテキスト カタログの保持] チェック ボックスをオフにします。 このオプションは、データベースを SQL Server 2005 からアップグレードする場合にのみ表示されます。

    • [状態]
      [準備完了] または [準備ができていません] のどちらかの状態を表示します。

    • [メッセージ]
      [メッセージ] 列に、次のようにデータベースに関する情報が表示される場合があります。

      • データベースがレプリケーションに含まれている場合、[状態][準備ができていません] になり、[メッセージ] 列に [データベースがレプリケートされました] と表示されます。

      • データベースにアクティブな接続が 1 つ以上ある場合、[状態][準備ができていません] になり、[メッセージ] 列に [<number_of_active_connections> のアクティブな接続] (例 : [1 のアクティブな接続]) と表示されます。 データベースをデタッチするには、[接続の削除] を選択してアクティブな接続を切断する必要があります。

      メッセージについてより詳しい情報を得るには、ハイパーリンクのテキストをクリックして利用状況モニターを開きます。

  2. [OK] をクリックします。

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

  4. エクスプローラーを使用して、移動元またはコピー元サーバーから移動先またはコピー先サーバーの同じ場所に、サーバー証明書と秘密キー ファイルのバックアップを移動またはコピーします。

  5. 移動先またはコピー先の SQL Server インスタンスに、データベース マスター キーを作成します。 詳細については、「Transact-SQL」を参照してください。

  6. 元のサーバー証明書のバックアップ ファイルを使用して、サーバー証明書を再作成します。 詳細については、「Transact-SQL」を参照してください。

  7. SQL Server Management Studio のオブジェクト エクスプローラーで、[データベース] フォルダーを右クリックし、[アタッチ] をクリックします。

  8. [データベースのアタッチ] ダイアログ ボックスで、[アタッチするデータベース] の下の [追加] をクリックします。

  9. [データベース ファイルの検索: server_name] ダイアログ ボックスで、新しいサーバーにアタッチするデータベース ファイルを選択し、[OK] をクリックします。

    [データベースのアタッチ] ダイアログ ボックスでは、次のオプションを使用できます。

    • [アタッチするデータベース]
      選択されたデータベースに関する情報を表示します。

    • <空白の列ヘッダー>
      アタッチ操作の状態を示すアイコンが表示されます。 表示されるアイコンの種類は、下の [状態] の説明に示します。

    • [MDF ファイルの場所]
      選択した MDF ファイルのパスとファイル名が表示されます。

    • [データベース名]
      データベースの名前が表示されます。

    • [次の名前でアタッチ]
      データベースを別の名前でアタッチする場合に、その名前を指定します。

    • [所有者]
      データベースの所有者のドロップダウン リストです。これを使用して、必要に応じて別の所有者を選択できます。

    • [状態]
      次の表に示すように、データベースの状態を表示します。

      アイコン

      状態テキスト

      説明

      (アイコンなし)

      (テキストなし)

      このオブジェクトのアタッチ操作が開始されていないか、保留されています。 これは、ダイアログ ボックスを開いたときの既定の状態です。

      緑の右向き三角形

      [実行中]

      アタッチ操作が開始されましたが、完了していません。

      緑のチェック マーク

      [成功]

      オブジェクトは正常にアタッチされました。

      赤い丸の中に白い×印

      [エラー]

      アタッチ操作でエラーが発生し、正常に完了しませんでした。

      4 つに区切られた丸印 (左右の領域が黒、上下の領域が白)

      [停止]

      ユーザーがアタッチ操作を停止したため、正常に完了しませんでした。

      丸の中に反時計回りの矢印

      [ロールバックされました]

      アタッチ操作は正常に完了しましたが、他のオブジェクトのアタッチ中にエラーが発生したため、ロールバックされました。

    • [メッセージ]
      空白のメッセージ、または "ファイルが見つかりません" のハイパーリンクが表示されます。

    • [追加]
      主な必須データベース ファイルを検索します。 ユーザーが .mdf ファイルを選択した場合、[アタッチするデータベース] グリッドの対応するフィールドに、対応する情報が自動的に入力されます。

    • [削除]
      選択したファイルを [アタッチするデータベース] グリッドから削除します。

    • [" <database_name> " データベースの詳細]
      デタッチするファイルの名前を表示します。 ファイルのパス名を確認または変更するには、参照ボタン ([...]) をクリックしてください。

      注意

      ファイルが存在しなかった場合、[メッセージ] 列に "見つかりませんでした" と表示されます。ログ ファイルが見つからない場合は、ログ ファイルが別のディレクトリに置かれているか、削除されています。 [データベースの詳細] グリッドでファイル パスを更新し、正しい場所を指定するか、そのログ ファイルをグリッドから削除します。 .ndf データ ファイルが見つからない場合、グリッドのパスを更新して、正しい場所を指定する必要があります。

    • [元のファイル名]
      データベースに属している、アタッチされたファイルの名前が表示されます。

    • [ファイルの種類]
      ファイルの種類を表します。[データ] または [ログ] になります。

    • [現在のファイル パス]
      選択されているデータベース ファイルのパスを表示します。 このパスは手作業で編集できます。

    • [メッセージ]
      空白のメッセージ、または "ファイルが見つかりません" ハイパーリンクが表示されます。

Transact-SQL の使用

  1. オブジェクト エクスプローラーで、データベース エンジンのインスタンスに接続します。

  2. [標準] ツール バーの [新しいクエリ] をクリックします。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、[実行] をクリックします。

    -- Detach the TDE protected database from the source server. 
    USE master ;
    GO
    EXEC master.dbo.sp_detach_db @dbname = N'CustRecords';
    GO
    -- Move or copy the database files from the source server to the same location on the destination server. 
    -- Move or copy the backup of the server certificate and the private key file from the source server to the same location on the destination server. 
    -- Create a database master key on the destination instance of SQL Server. 
    USE master;
    GO
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '*rt@40(FL&dasl1';
    GO
    -- Recreate the server certificate by using the original server certificate backup file. 
    -- The password must be the same as the password that was used when the backup was created.
    
    CREATE CERTIFICATE TestSQLServerCert 
    FROM FILE = 'TestSQLServerCert'
    WITH PRIVATE KEY 
    (
        FILE = 'SQLPrivateKeyFile',
        DECRYPTION BY PASSWORD = '*rt@40(FL&dasl1'
    );
    GO
    -- Attach the database that is being moved. 
    -- The path of the database files must be the location where you have stored the database files.
    CREATE DATABASE [CustRecords] ON 
    ( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\CustRecords.mdf' ),
    ( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\CustRecords_log.LDF' )
    FOR ATTACH ;
    GO
    

詳細については、以下のトピックを参照してください。

[トップに戻る] リンクで使用される矢印アイコン[Top]

関連項目

概念

データベースのデタッチとアタッチ (SQL Server)