別の 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 データベースに保存されている証明書で保護されたデータベース暗号化キーを使用します。
透過的なデータ暗号化で保護されたデータベースを作成するには
クエリ エディターで、次の 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
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
TDE で保護するデータベースを作成します。
CREATE DATABASE CustRecords ; GO CREATE DATABASE CustRecords ; GO
新しいデータベースに切り替えます。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 を使用してこの手順を実行するには、オブジェクト エクスプローラーでデータベースを右クリックし、[タスク] をポイントして、[データベース暗号化の管理] をクリックします。[データベース暗号化の管理] ダイアログ ボックスを使用して、データベース暗号化キーを選択し、データベース暗号化をオンに設定します。
単純なテーブルを作成します。テーブルにデータを入力し、テーブルからデータを選択してデータベースをテストします。
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 インスタンスに移動するには
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 つのデータベース ファイル (CustomerRecords.mdf と CustomerRecords_log.LDF) は、既定の場所である C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA に保存されます。ただし、ファイル名と場所は異なる場合があります。
エクスプローラーを使用して、移動元またはコピー元サーバーから移動先またはコピー先サーバーの同じ場所に、サーバー証明書と秘密キー ファイルのバックアップを移動またはコピーします。この例では、これらのファイルは、C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA にある既定のデータ フォルダーに保存されます。
移動先またはコピー先の SQL Server インスタンスに、データベース マスター キーを作成します。パスワードは、移動元またはコピー元サーバーと同じにする必要はありません。
USE master; GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = '**************'; GO USE master; GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = '**************'; GO
元のサーバー証明書のバックアップ ファイルを使用して、サーバー証明書を再作成します。パスワードは、バックアップの作成時に使用したパスワードと同じである必要があります。
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
移動するデータベースをアタッチします。データベース ファイルのパスは、データベース ファイルを保存した場所にする必要があります。
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] をクリックします。
テーブルからデータを選択して、データベースへのアクセスをテストします。
USE CustRecords ; GO SELECT CustomerID, SecretData FROM CustomerRecord ; GO USE CustRecords ; GO SELECT CustomerID, SecretData FROM CustomerRecord ; GO
[先頭に戻る]
補足情報: TDE で保護されたデータベースを新しい SQL Server インスタンスに移動した後に実行する手順
master データベースのバックアップ
- 証明書のインストールとデータベースのアタッチによって、master データベース内の情報が変更されています。master データベースの新しいバックアップを作成する必要があります。
[先頭に戻る]