マイクロソフトの平山です。これから数回にわたり「透過的なデータ暗号化」を使用して暗号化されたデータベースの使い勝手について紹介していきたいと思います。
SQL Server 2008 から導入された、「透過的なデータ暗号化」のメリットのひとつとして、データベースの物理ファイルやバックアップが流出したり盗難にあってもデータをのぞき見されることがない、ということが挙げられます。それは次のような理由によります。
SQL Server オンラインブックなどのドキュメントには、データベースを暗号化するための方法は親切に解説してありますが、暗号化したデータベースを復元する方法をわかりやすくまとめている箇所がありません。そこで今回のエントリでは、暗号化されたデータベースを別インスタンスに復元する方法を紹介したいと思います。
●まずはデータベースの暗号化までのおさらい
1. データベースとテーブルを作成しますcreate database TDE_DBgouse TDE_DBgocreate table t1 (c1 nvarchar(500))go2. サービスマスターキーを作成しますuse mastergocreate master key encryption by password = 'secret!masterKey1'go3. 証明書を作成しますcreate certificate TDE_TEST with subject = 'Test Certificate'go3. データベース暗号化キーを作成しますuse TDE_DBgocreate database encryption key with algorithm = AES_256encryption by server certificate TDE_TESTgo4. データベースを暗号化しますalter database TDE_DB set encryption ongo
●続いてデータベースと証明書のバックアップ
1. データベースのバックアップbackup database TDE_DB to disk='C:\TDE_DB.bak'go2. 証明書のバックアップbackup certificate TDE_TEST to file = 'C:\TDE_TEST.cer'with private key (file = 'c:\TDE_TEST_KEY.pvk',encryption by password = 'secret!masterKey1')go
●いよいよ別インスタンスへの復元です。データベースと証明書のバックアップファイルは復元先のマシンにコピーしておいてください。
1. 復元先のインスタンスでも独自のサービスマスターキーを作成しておく必要がありますcreate master key encryption by password = 'tdetest!tdetest1'go2. データベースの復元に先駆けて、証明書を復元しますcreate certificate TDE_TESTfrom file = 'c:\TDE_TEST.cer'with private key (file = 'c:\TDE_TEST_KEY.pvk', decryption by password ='secret!masterKey1')go3. これで別インスタンスへのデータベースの復元が可能になりますrestore database TDE_DB from disk='C:\TDE_DB.bak'go
ちなみに上記の手順ではなく、単にデータベースの復元のみを行うと次のようなエラーが発生します。
メッセージ 33111、レベル 16、状態 3、行 1拇印 '0xC31E2828C900C230B2BC1E9BEBE5B66DCAB9EFXX' でサーバー 証明書 が見つかりません。
また、データベースの復元の際にとても重要な意味を持つ、サービスマスターキーのパスワード、証明書のバックアップの管理には細心の注意を払うようにしてください。