おはようございます。
私はこれに少し困惑しています。テーブルの列を暗号化したデータベースがあります。これは、私が作成したマスターキーと、証明書と対称キーです。このデータベースをSQLの別のインスタンスに移行する必要がありますが、データベースを移行した後、情報を復号化できません。
助けて?
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'omitted';
CREATE CERTIFICATE SecureLoginPasswords
WITH SUBJECT = 'SecureLogin Customer Passwords for Website';
GO
CREATE SYMMETRIC KEY SSN_Key_01
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE SecureLoginPasswords;
GO
このデータベースをSQLの別のインスタンスに移行する必要がありますが、データベースを移行した後、情報を復号化できません。
データベースマスターキー(DMK)があり、サービスマスターキー(SMK)とパスワードの両方で保護されています。 SQL Serverの別のインスタンスに移行しているため、パスワードを使用してDMKにアクセスできますが、SMKが変更されたため、 自動キー復号化 は機能しなくなります。
修正は簡単です。データベースを新しいインスタンスに復元するときは、次を実行します。
use databasename
go
open master key decryption by password = 'MyPassword'
go
alter master key drop encryption by service master key
go
alter master key add encryption by service master key
go
close master key
go
これにより、SMKによるDMKの暗号化が削除されます。これは、新しいインスタンスでそれを復号化できないためです。次に、SMKを介してDMKに暗号化を戻し、自動キー復号化が機能するようにします。
他の回答が示すように、SMKのバックアップと復元を言わない理由は、それがインスタンス上のすべてのデータベースに影響するのに対し、壊れたデータベースを修正するだけでは現在のデータベースに他の問題が発生しないためです。
まず、マスターキーをバックアップする必要があります
backup service master key to file = 'c:\exportedmasterkey\MasterkeyLMI.SMK'
encryption by password = 'omitted'
go
次に、マスターキーを新しいインスタンスに復元する必要があります。私の場合、データベースを、証明書と対称キーを持った他のインスタンスに復元しました。
RESTORE SERVICE MASTER KEY FROM FILE = 'c:\exportedmasterkey\MasterkeyLMI.SMK'
DECRYPTION BY PASSWORD = 'omitted'
私が行った最後の手順は、新しいユーザーに証明書とキーに対するセキュリティを付与することでした。
GRANT CONTROL ON CERTIFICATE::[CertName] TO [User]
GRANT VIEW DEFINITION ON SYMMETRIC KEY::[KeyName] TO [User]