web-dev-qa-db-ja.com

暗号化用のデータベースマスターキーと証明書を持つデータベースを移行する方法

おはようございます。

私はこれに少し困惑しています。テーブルの列を暗号化したデータベースがあります。これは、私が作成したマスターキーと、証明書と対称キーです。このデータベースを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  
3
Teddy Higgins

このデータベースを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のバックアップと復元を言わない理由は、それがインスタンス上のすべてのデータベースに影響するのに対し、壊れたデータベースを修正するだけでは現在のデータベースに他の問題が発生しないためです。

3
Sean Gallardy

まず、マスターキーをバックアップする必要があります

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]
1
Teddy Higgins