別の 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 の使用
データベース マスター キーと証明書を master データベース内に作成します。 詳細については、「Transact-SQL」を参照してください。
master データベースに、サーバー証明書のバックアップを作成します。 詳細については、「Transact-SQL」を参照してください。
オブジェクト エクスプローラーで、[データベース] フォルダーを右クリックし、[新しいデータベース] をクリックします。
[新しいデータベース] ダイアログ ボックスで、[データベース名] ボックスに新しいデータベースの名前を入力します。
[所有者] ボックスに新しいデータベースの所有者を入力します。 または、省略記号 [...] をクリックして [データベース所有者の選択] ダイアログ ボックスを開きます。 新しいデータベースの作成の詳細については、「データベースの作成」を参照してください。
オブジェクト エクスプローラーで、プラス記号をクリックして [データベース] フォルダーを展開します。
作成したデータベースを右クリックし、[タスク] をポイントし、[データベース暗号化の管理] をクリックします。
[データベース暗号化の管理] ダイアログ ボックスでは、次のオプションを使用できます。
[暗号化アルゴリズム]
データベース暗号化で使用するアルゴリズムを表示または設定します。 既定の暗号化アルゴリズムは AES128 です。 このフィールドを空白にすることはできません。 暗号化アルゴリズムの詳細については、「暗号化アルゴリズムの選択」を参照してください。サーバー証明書の使用
証明書によって保護するように暗号化を設定します。 一覧から選択します。 サーバー証明書に対する VIEW DEFINITION 権限がない場合、このリストは空になります。 証明書による暗号化方法が選択されている場合、この値を空にすることはできません。 証明書の詳細については、「SQL Server の証明書と非対称キー」を参照してください。[サーバー非対称キーの使用]
暗号化が非対称キーで保護されるように設定します。 使用可能な非対称キーのみが表示されます。 TDE を使用してデータベースを暗号化できるのは、EKM モジュールによって保護される非対称キーだけです。[データベース暗号化をオンに設定]
データベースを変更して TDE をオンまたはオフにします。
完了したら、[OK] をクリックします。
Transact-SQL の使用
オブジェクト エクスプローラーで、データベース エンジンのインスタンスに接続します。
[標準] ツール バーの [新しいクエリ] をクリックします。
次の例をコピーしてクエリ ウィンドウに貼り付け、[実行] をクリックします。
-- 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 の使用
オブジェクト エクスプローラーで、暗号化したデータベースを右クリックし、[タスク] をポイントして [デタッチ] をクリックします。
[データベースのデタッチ] ダイアログ ボックスでは、次のオプションを使用できます。
[デタッチするデータベース]
デタッチするデータベースを一覧表示します。[データベース名]
デタッチするデータベースの名前を表示します。[接続の削除]
指定したデータベースへの接続を切断します。注 アクティブな接続があるデータベースをデタッチすることはできません。
[統計の更新]
既定では、データベースをデタッチしても、古い最適化統計情報が保持されます。既存の最適化統計情報を更新するには、このチェック ボックスをオンにします。[フルテキスト カタログの保持]
既定では、デタッチ操作を行っても、データベースに関連付けられたフルテキスト カタログが保持されます。 これらのカタログを削除するには、[フルテキスト カタログの保持] チェック ボックスをオフにします。 このオプションは、データベースを SQL Server 2005 からアップグレードする場合にのみ表示されます。[状態]
[準備完了] または [準備ができていません] のどちらかの状態を表示します。[メッセージ]
[メッセージ] 列に、次のようにデータベースに関する情報が表示される場合があります。データベースがレプリケーションに含まれている場合、[状態] は [準備ができていません] になり、[メッセージ] 列に [データベースがレプリケートされました] と表示されます。
データベースにアクティブな接続が 1 つ以上ある場合、[状態] は [準備ができていません] になり、[メッセージ] 列に [<number_of_active_connections> のアクティブな接続] (例 : [1 のアクティブな接続]) と表示されます。 データベースをデタッチするには、[接続の削除] を選択してアクティブな接続を切断する必要があります。
メッセージについてより詳しい情報を得るには、ハイパーリンクのテキストをクリックして利用状況モニターを開きます。
[OK] をクリックします。
Windows エクスプローラーを使用して、移動元またはコピー元サーバーから移動先またはコピー先サーバーの同じ場所に、データベース ファイルを移動またはコピーします。
エクスプローラーを使用して、移動元またはコピー元サーバーから移動先またはコピー先サーバーの同じ場所に、サーバー証明書と秘密キー ファイルのバックアップを移動またはコピーします。
移動先またはコピー先の SQL Server インスタンスに、データベース マスター キーを作成します。 詳細については、「Transact-SQL」を参照してください。
元のサーバー証明書のバックアップ ファイルを使用して、サーバー証明書を再作成します。 詳細については、「Transact-SQL」を参照してください。
SQL Server Management Studio のオブジェクト エクスプローラーで、[データベース] フォルダーを右クリックし、[アタッチ] をクリックします。
[データベースのアタッチ] ダイアログ ボックスで、[アタッチするデータベース] の下の [追加] をクリックします。
[データベース ファイルの検索: server_name] ダイアログ ボックスで、新しいサーバーにアタッチするデータベース ファイルを選択し、[OK] をクリックします。
[データベースのアタッチ] ダイアログ ボックスでは、次のオプションを使用できます。
[アタッチするデータベース]
選択されたデータベースに関する情報を表示します。<空白の列ヘッダー>
アタッチ操作の状態を示すアイコンが表示されます。 表示されるアイコンの種類は、下の [状態] の説明に示します。[MDF ファイルの場所]
選択した MDF ファイルのパスとファイル名が表示されます。[データベース名]
データベースの名前が表示されます。[次の名前でアタッチ]
データベースを別の名前でアタッチする場合に、その名前を指定します。[所有者]
データベースの所有者のドロップダウン リストです。これを使用して、必要に応じて別の所有者を選択できます。[状態]
次の表に示すように、データベースの状態を表示します。アイコン
状態テキスト
説明
(アイコンなし)
(テキストなし)
このオブジェクトのアタッチ操作が開始されていないか、保留されています。 これは、ダイアログ ボックスを開いたときの既定の状態です。
緑の右向き三角形
[実行中]
アタッチ操作が開始されましたが、完了していません。
緑のチェック マーク
[成功]
オブジェクトは正常にアタッチされました。
赤い丸の中に白い×印
[エラー]
アタッチ操作でエラーが発生し、正常に完了しませんでした。
4 つに区切られた丸印 (左右の領域が黒、上下の領域が白)
[停止]
ユーザーがアタッチ操作を停止したため、正常に完了しませんでした。
丸の中に反時計回りの矢印
[ロールバックされました]
アタッチ操作は正常に完了しましたが、他のオブジェクトのアタッチ中にエラーが発生したため、ロールバックされました。
[メッセージ]
空白のメッセージ、または "ファイルが見つかりません" のハイパーリンクが表示されます。[追加]
主な必須データベース ファイルを検索します。 ユーザーが .mdf ファイルを選択した場合、[アタッチするデータベース] グリッドの対応するフィールドに、対応する情報が自動的に入力されます。[削除]
選択したファイルを [アタッチするデータベース] グリッドから削除します。[" <database_name> " データベースの詳細]
デタッチするファイルの名前を表示します。 ファイルのパス名を確認または変更するには、参照ボタン ([...]) をクリックしてください。注 ファイルが存在しなかった場合、[メッセージ] 列に "見つかりませんでした" と表示されます。ログ ファイルが見つからない場合は、ログ ファイルが別のディレクトリに置かれているか、削除されています。 [データベースの詳細] グリッドでファイル パスを更新し、正しい場所を指定するか、そのログ ファイルをグリッドから削除します。 .ndf データ ファイルが見つからない場合、グリッドのパスを更新して、正しい場所を指定する必要があります。
[元のファイル名]
データベースに属している、アタッチされたファイルの名前が表示されます。[ファイルの種類]
ファイルの種類を表します。[データ] または [ログ] になります。[現在のファイル パス]
選択されているデータベース ファイルのパスを表示します。 このパスは手作業で編集できます。[メッセージ]
空白のメッセージ、または "ファイルが見つかりません" ハイパーリンクが表示されます。
Transact-SQL の使用
オブジェクト エクスプローラーで、データベース エンジンのインスタンスに接続します。
[標準] ツール バーの [新しいクエリ] をクリックします。
次の例をコピーしてクエリ ウィンドウに貼り付け、[実行] をクリックします。
-- 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]