web-dev-qa-db-ja.com

暗号化されたデータベースを別のサーバーに復元する

私はSQLServer 2008で動作する製品を使用しています。当然のことながら、それを提供する会社はSQLServerサポートを提供していません。製品をインストールしたときに、データベースを暗号化するためのパスワードを指定しました。別のサーバーでテストするために、製品の別のコピーを実行したいのですが。データベースを別のサーバーに復元し、その別のサーバーに製品をインストールしました。インストール時に同じパスワードを入力し、メインサーバーからバックアップを復元しました。ただし、エラーメッセージが表示されます。

System.Data.SqlClient.SqlException: An error occurred during decryption.

製品から。 SQLServer Management Studioを使用してテーブルにアクセスできます。

私はこれを試しました:

最初のサーバー:

CREATE CERTIFICATE cert1 WITH SUBJECT = 'Certificate for my stuff'

BACKUP CERTIFICATE  cert1 TO FILE = 'd:\backup\cert1.dat' 
WITH PRIVATE KEY 
(
ENCRYPTION BY PASSWORD = 'mypassword',
FILE = 'd:\backup\cert1_privatekey.dat'
)

2番目のサーバー:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'mypassword'

CREATE CERTIFICATE cert1 FROM FILE = 'd:\cert1.dat'
WITH PRIVATE KEY
(
FILE = 'd:\cert1_privatekey.dat',
DECRYPTION BY PASSWORD = 'mypassword'
)

私は2番目のサーバーでもこれを試しました:

alter MASTER KEY regenerate with enCRYPTION BY PASSWORD='password'

しかし、それは非対称キーに関するエラーメッセージを与えました。

最初のサーバーから2番目のサーバーにバックアップを復元するにはどうすればよいですか?

更新:

データベースにも非対称キーと対称キーがあります。非対称キーを使用して対称キーを開くと、同じエラーが発生するので、それが機能しない理由だと思います-どういうわけか、キーが使用できるように転送されていません。

10
paulmorriss

書いた ミラーリングとTDEに関するブログエントリ。

セカンダリサーバーでデータベースを取得するには、コード行が必要であることを理解するのに少し時間がかかりました。

 OPEN MASTER KEY DECRYPTION BY PASSWORD = 'SomePassword'
 ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
 GO

パスワードは、マスターキーファイルの暗号化に使用したものと同じです。 2番目のSQLサーバーでコマンドを発行した後、すべてがうまくいきました。 ここ は、私が作成したdb.stackexchangeの投稿です。

8
RateControl