SQL Serverデータベースを、あるシステムから次の同じセットアップにコピーしましたが、物理マシンはまったく異なります。 Norton Ghostを使用してファイルを手動で回復しました。たとえば、SQL Server 2008 Expressを再インストールした後、c:\ ProgramFilesにあるSQLServer2008フォルダー全体を使用しました。
私のデータベースの1つで、そのテーブルの1つである列のいくつかでAES_256暗号化が有効になっています。 IIS7をリセットし、データベースにアクセスするアプリを実行しようとすると、データを取得すると、次のエラーが発生します。
'/'アプリケーションのサーバーエラー。この操作を実行する前に、データベースにマスターキーを作成するか、セッションでマスターキーを開いてください。説明:現在のWebリクエストの実行中に未処理の例外が発生しました。エラーの詳細とコードの発生場所については、スタックトレースを確認してください。
例外の詳細:System.Data.SqlClient.SqlException:この操作を実行する前に、データベースにマスターキーを作成するか、セッションでマスターキーを開いてください。
ソースエラー:
現在のWebリクエストの実行中に、未処理の例外が生成されました。例外の発生源と場所に関する情報は、以下の例外スタックトレースを使用して識別できます。
私はいくつかの読書をし、AES暗号化がマシンキーとどのようにリンクされているかについていくつかのリンクを見つけましたが、それを新しいシステムにコピーする方法について途方に暮れています。あるいは、そうではないかもしれません。
注:対称鍵、証明書、マスター鍵を削除して再作成してみました。これはエラーを取り除きますが、AES_256を介して暗号化されたデータは表示されません。ただし、暗号化されていない列は暗号化されます。
どんな助けでも大歓迎です。前もって感謝します!
データベースマスターキーは、SQLServerがインストールされているマシンに固有のサーバーマスターキーを使用して暗号化されます。データベースを別のサーバーに移動すると、ローカルサーバーのキーが異なる可能性が高いため、データベースのマスターキーを自動的に復号化して開くことができなくなります。データベースマスターキーを復号化できない場合、それに依存する他のもの(証明書、対称キーなど)を復号化することはできません。
基本的に、データベースマスターキーを新しいサーバーキーに対して再暗号化する必要があります。これは、次のスクリプトで実行できます(管理者権限を使用)。
-- Reset database master key for server (if database was restored from backups on another server)
OPEN MASTER KEY DECRYPTION BY PASSWORD = '---your database master key password---'
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
GO
データベースマスターキーを作成するときは、サービスマスターキーを使用できないシナリオでパスワードを使用してキーを開くことができるように、常にパスワードも指定する必要があることに注意してください。そのパスワードがどこかに保存されていることを願っています。
または、データベースマスターキーのバックアップを復元することもできますが、ソースサーバーではなく、ターゲットサーバー用に作成されたものが必要です。
バックアップもパスワードも持っていない場合は、新しいパスワードでデータベースマスターキーを削除して再作成する必要があるため、新しいサーバーで暗号化されたデータを復元できるかどうかはわかりません。これにより、依存するキーとデータがすべて削除されます。
同様の状況が発生しました。OSドライブが停止した後、サーバーが再構築されました。 SQLを再インストールし、手つかずのデータドライブ上のすべての古いデータベースに再接続しました。暗号化された列を除いて、すべてが機能しました。しかし、私の問題は、マスターサービスキーがホースで接続されていることでした。移動前にSQLサーバーサービスアカウントであった同じドメイン資格情報に戻ることで、マスターサービスキーを修復できました。
この 記事 は私に修正を与えました(彼の優れた記事のために マットボウラー へのkudos)。ローカルマシンのキーが変更されたことは知っていましたが、同じサービスアカウントを使用できるようになりました。
サービスマスターキー:キー階層の最上位には、サービスマスターキーがあります。 SQL Serverインスタンスごとに1つあり、対称キーであり、マスターデータベースに格納されます。データベースマスターキー、リンクサーバーのパスワード、およびSQLServerの最初の起動時に生成される資格情報を暗号化するために使用されます。
このキーに関連付けられたユーザー設定可能なパスワードはありません–SQLServerサービスアカウントとローカルマシンキーによって暗号化されます。起動時に、SQL Serverは、これらの復号化のいずれかを使用してサービスマスターキーを開くことができます。それらの1つが失敗した場合– SQL Serverはもう1つを使用し、失敗した復号化を「修正」します(両方が失敗した場合– SQL Serverはエラーになります)。これは、フェイルオーバー後にローカルマシンキーが異なるクラスターなどの状況を説明するためです。これは、SQL Server構成マネージャーを使用してサービスアカウントを変更する必要がある理由の1つでもあります。これは、サービスマスターキーの暗号化が正しく再生成されるためです。