別の 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 を使用します。
データベース マスター キーと証明書を
master
データベース内に作成します。 詳細については、この記事で後述する「Transact-SQL の使用」を参照してください。master
データベースに、サーバー証明書のバックアップを作成します。 詳細については、この記事で後述する「Transact-SQL の使用」を参照してください。オブジェクト エクスプローラーで、 [データベース] フォルダーを右クリックし、 [新しいデータベース]をクリックします。
[新しいデータベース] ダイアログ ボックスで、 [データベース名] ボックスに新しいデータベースの名前を入力します。
[所有者] ボックスに新しいデータベースの所有者を入力します。 または、省略記号 [...] を選択して [データベース所有者の選択] ダイアログ ボックスを開きます。 新しいデータベースの作成の詳細については、「データベースを作成する」を参照してください。
オブジェクト エクスプローラーで、プラス記号を選択して [データベース] フォルダーを展開します。
作成したデータベースを右クリックし、 [タスク]をポイントし、 [データベース暗号化の管理]をクリックします。
[データベース暗号化の管理] ダイアログ ボックスでは、次のオプションを使用できます。
暗号化アルゴリズム
データベース暗号化で使用するアルゴリズムを表示または設定します。 既定の暗号化アルゴリズムはAES128 です。 このフィールドを空白にすることはできません。 暗号化アルゴリズムの詳細については、「暗号化アルゴリズムの選択」をご覧ください。サーバー証明書の使用
証明書によって保護するように暗号化を設定します。 一覧から選択します。 サーバー証明書に対するVIEW DEFINITION
権限がない場合、このリストは空になります。 証明書による暗号化方法が選択されている場合、この値を空にすることはできません。 証明書の詳細については、「 SQL Server Certificates and Asymmetric Keys」をご覧ください。[サーバー非対称キーの使用]
暗号化が非対称キーで保護されるように設定します。 使用可能な非対称キーのみが表示されます。 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\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
詳細については、以下を参照してください:
- CREATE MASTER KEY (Transact-SQL)
- CREATE CERTIFICATE (Transact-SQL)
- BACKUP CERTIFICATE (Transact-SQL)
- CREATE DATABASE
- CREATE DATABASE ENCRYPTION KEY (Transact-SQL)
- ALTER DATABASE (Transact-SQL)
Transparent Data Encryption で保護されたデータベースを移動する
次の手順は、SQL Server Management Studio を使用し、Transact-SQL を使用して、TDE で保護されたデータベースを移動する方法を示しています。
SQL Server Management Studio を使用します。
オブジェクト エクスプローラーで、暗号化したデータベースを右クリックし、[タスク] をポイントして [デタッチ] を選択します。
[データベースのデタッチ] ダイアログ ボックスでは、次のオプションを使用できます。
[デタッチするデータベース]
デタッチするデータベースを一覧表示します。データベース名
デタッチするデータベースの名前を表示します。[接続の削除]
指定したデータベースへの接続を切断します。
Note
アクティブな接続があるデータベースをデタッチすることはできません。
統計の更新
既定では、データベースをデタッチしても、古い最適化統計情報が保持されます。既存の最適化統計情報を更新するには、このチェック ボックスをオンにします。
[フルテキスト カタログの保持]
既定では、デタッチ操作を行っても、データベースに関連付けられたフルテキスト カタログが保持されます。 これらのカタログを削除するには、 [フルテキスト カタログの保持] チェック ボックスをオフにします。 このオプションは、SQL Server 2005 (9.x) からデータベースをアップグレードする場合にのみ表示されます。
Status
[準備完了] または [準備ができていません]のどちらかの状態を表示します。
メッセージ
[メッセージ] 列に、次のようにデータベースに関する情報が表示される場合があります。
データベースがレプリケーションに含まれている場合、 [状態] は [準備ができていません] になり、 [メッセージ] 列に [データベースがレプリケートされました]と表示されます。
データベースに1つ以上のアクティブな接続がある場合、状態はNot ready(準備完了ではなく)となり、Message(メッセージ列には<number_of_active_connections>Active connection(s)例: 1 Active connection(s)と表示されます。 データベースをデタッチするには、 [接続の削除]を選択してアクティブな接続を切断する必要があります。
メッセージについてより詳しい情報を得るには、ハイパーリンクのテキストを選択して、利用状況モニターを開きます。
[OK] を選択します。
Windows エクスプローラーを使用して、移動元またはコピー元サーバーから移動先またはコピー先サーバーの同じ場所に、データベース ファイルを移動またはコピーします。
エクスプローラーを使用して、移動元またはコピー元サーバーから移動先またはコピー先サーバーの同じ場所に、サーバー証明書と秘密キー ファイルのバックアップを移動またはコピーします。
SQL Server のインストール先インスタンスにデータベース・マスターキーを作成する。 詳細については、この記事で後述する「Transact-SQL の使用」を参照してください。
元のサーバー証明書のバックアップ ファイルを使用して、サーバー証明書を再作成します。 詳細については、この記事で後述する「Transact-SQL の使用」を参照してください。
SQL Server Management Studioのオブジェクト エクスプローラーで、データベースフォルダを右クリックし、「Attach」を選択します。
[データベースのアタッチ] ダイアログ ボックスで、[アタッチするデータベース] の下の [追加] を選択します。
データベース ファイルの検索: [server_name] ダイアログ ボックスで、新しいサーバーにアタッチするデータベース ファイルを選択し、[OK] を選択します。
[データベースのインポート] ダイアログ ボックスでは、次のオプションを使用できます。
[アタッチするデータベース]
選択されたデータベースに関する情報を表示します。<カラムヘッダーなし>
アタッチ操作の状態を示すアイコンが表示されます。 表示されるアイコンについては、「状態」の説明をご覧ください。[MDF ファイルの場所]
選択した MDF ファイルのパスとファイル名が表示されます。データベース名
データベースの名前が表示されます。[次の名前でアタッチ]
データベースを別の名前でアタッチする場合に、その名前を指定します。所有者
データベースの所有者のドロップダウン リストです。これを使用して、必要に応じて別の所有者を選択できます。Status
次の表に示すように、データベースの状態を表示します。
アイコン | 状態テキスト | 説明 |
---|---|---|
(アイコンなし) | (テキストなし) | このオブジェクトのアタッチ操作が開始されていないか、保留中の可能性があります。 これは、ダイアログ ボックスを開いたときの既定の状態です。 |
緑の右向き三角形 | 進行中 | アタッチ操作が開始されましたが、完了していません。 |
緑のチェック マーク | 成功 | オブジェクトは正常にアタッチされました。 |
赤い丸の中に白い×印 | エラー | アタッチ操作でエラーが発生し、正常に完了しませんでした。 |
2つの黒い象限(左右)と2つの白い象限(上下)を含む円 | 停止 | ユーザーがアタッチ操作を停止したため、正常に完了しませんでした。 |
丸の中に反時計回りの矢印 | [ロールバックされました] | アタッチ操作は正常に完了しましたが、他のオブジェクトのアタッチ中にエラーが発生したため、ロールバックされました。 |
メッセージ
空白のメッセージ、または"ファイルが見つかりません"ハイパーリンクが表示されます。
追加
主な必須データベース ファイルを検索します。 ユーザーが .mdf ファイルを選択した場合、 [アタッチするデータベース] グリッドの対応するフィールドに、対応する情報が自動的に入力されます。
削除
選択したファイルを [アタッチするデータベース] グリッドから削除します。
" <
デタッチするファイルの名前を表示します。 ファイルのパス名を確認または変更するには、参照ボタン ([...]) を選択してください。
Note
ファイルが存在しない場合、[メッセージ] 列に "見つかりません" と表示されます。ログ ファイルが見つからない場合は、別のディレクトリに存在するか、削除されています。 [データベースの詳細] グリッドでファイル パスを更新し、正しい場所を指定するか、そのログ ファイルをグリッドから削除します。 .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\MSSQL16.MSSQLSERVER\MSSQL\DATA\CustRecords.mdf'), (FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\CustRecords_log.LDF') FOR ATTACH; GO
詳細については、以下を参照してください: