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

適用対象:SQL Server

この記事では、Transparent Data Encryption (TDE) を使用してデータベースを保護し、SQL Server Management Studio または Transact-SQL を使用してデータベースを SQL Server の別のインスタンスに移動する方法について説明します。 TDE は、データとログ ファイルの I/O 暗号化と複合化をリアルタイムで実行します。 暗号化は、復旧中に、可用性のためのデータベース ブート レコードに格納されるデータベース暗号化キー (DEK) を使用します。 DEK とは、サーバーの master データベースに保存されている証明書を使用して保護される対称キー、または EKM モジュールによって保護される非対称キーのことです。

制限事項

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

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

  • 既定では、SQL Server はここで作成されたファイルを C:\Program Files\Microsoft SQL Server\MSSQL<xx>.MSSQLSERVER\MSSQL\DATA に格納します (<xx> はバージョン番号を示します)。

アクセス許可

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

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

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

Transparent Data Encryption で保護されたデータベースを作成する

次の手順は、SQL Server Management Studio を使用し、Transact-SQL を使用して、TDE で保護されたデータベースを作成する方法を示しています。

SQL Server Management Studio を使用する

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

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

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

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

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

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

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

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

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

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

    [サーバー非対称キーの使用]
    暗号化が非対称キーで保護されるように設定します。 使用可能な非対称キーのみが表示されます。 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\MSSQL16.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
    

詳細については、以下を参照してください:

Transparent Data Encryption で保護されたデータベースを移動する

次の手順は、SQL Server Management Studio を使用し、Transact-SQL を使用して、TDE で保護されたデータベースを移動する方法を示しています。

SQL Server Management Studio を使用する

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

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

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

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

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

Note

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

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

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

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

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

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

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

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

  1. [OK] を選択します。

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

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

  4. SQL Server のインストール先インスタンスにデータベース・マスターキーを作成する。 詳細については、この記事で後述する「Transact-SQL の使用」を参照してください。

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

  6. SQL Server Management Studioのオブジェクト エクスプローラーで、データベースフォルダを右クリックし、「Attach」を選択します

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

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

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

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

    <カラムヘッダーなし>
    アタッチ操作の状態を示すアイコンが表示されます。 表示されるアイコンについては、「状態」の説明をご覧ください。

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

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

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

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

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

アイコン 状態テキスト 説明
(アイコンなし) (テキストなし) このオブジェクトのアタッチ操作が開始されていないか、保留中の可能性があります。 これは、ダイアログ ボックスを開いたときの既定の状態です。
緑の右向き三角形 [実行中] アタッチ操作が開始されましたが、完了していません。
緑のチェック マーク Success オブジェクトは正常にアタッチされました。
赤い丸の中に白い×印 エラー アタッチ操作でエラーが発生し、正常に完了しませんでした。
2つの黒い象限(左右)と2つの白い象限(上下)を含む円 Stopped ユーザーがアタッチ操作を停止したため、正常に完了しませんでした。
丸の中に反時計回りの矢印 [ロールバックされました] アタッチ操作は正常に完了しましたが、他のオブジェクトのアタッチ中にエラーが発生したため、ロールバックされました。

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

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

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

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

Note

ファイルが存在しない場合、[メッセージ] 列に "見つかりません" と表示されます。ログ ファイルが見つからない場合は、別のディレクトリに存在するか、削除されています。 [データベースの詳細] グリッドでファイル パスを更新し、正しい場所を指定するか、そのログ ファイルをグリッドから削除します。 .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\MSSQL16.MSSQLSERVER\MSSQL\DATA\CustRecords.mdf'),
        (FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\CustRecords_log.LDF')
    FOR ATTACH;
    GO
    

詳細については、以下を参照してください: