web-dev-qa-db-ja.com

暗号化されたデータベースを別のサーバーに復元(バックアップ暗号化を使用)

同じマシンに2つのSQL Serverインスタンスがあります。 暗号化されたバックアップ をデータベースの1つに作成し、それを2番目のインスタンスに復元します。次の手順を実行しています。

  1. 証明書の暗号化に使用されるmasterデータベースにデータベースマスターキーを作成してバックアップします。

    USE MASTER;
    GO
    
    CREATE MASTER KEY
    ENCRYPTION BY PASSWORD = 'MasterKey_Password';
    GO
    
    BACKUP MASTER KEY
    TO FILE = 'E:\GKKeys\MASTER_KEY.key'
    ENCRYPTION BY PASSWORD = 'MasterKey_BACKUP_Password';
    GO
    
  2. 暗号化に使用する証明書を作成してバックアップします。

    USE MASTER;
    GO
    
    -- създаваме сертификат, който ще използвам за криптиране на backup-a
    CREATE CERTIFICATE BackupEncryptTestCert
    WITH SUBJECT = 'smGK_BackupCertificate'
    GO
    
    BACKUP CERTIFICATE BackupEncryptTestCert
    TO FILE = 'E:\GKKeys\SMGK_BACKUP_CERTIFICATE.cer'
    WITH PRIVATE KEY
    (
        FILE = 'E:\GKKeys\SMGK_BACKUP_CERTIFICATE_PRIVATE_KEY.key'
       ,ENCRYPTION BY PASSWORD = 'smGK_BackupCertificate_BACKUP_Password'
    );
    
  3. バックアップの作成:

    BACKUP DATABASE smGK
    TO DISK = 'E:\GKKeys\smGKFULLEncrtypted.back'
    WITH COMPRESSION, STATS = 10, ENCRYPTION (ALGORITHM = AES_256,SERVER CERTIFICATE = BackupEncryptTestCert)
    
  4. ここで、2番目のインスタンスでmaster keyを復元したいのですが、許可されていません。

    USE MASTER;
    GO
    
    RESTORE MASTER KEY
    FROM FILE = 'E:\GKKeys\MASTER_KEY.key'
    DECRYPTION BY PASSWORD = 'MasterKey_BACKUP_Password'
    ENCRYPTION BY PASSWORD = 'smGK_MasterKeyPassword';
    

    メッセージ15317、レベル16、状態2、行4マスターキーファイルが存在しないか、形式が無効です。

誰がこれを引き起こしているのか教えてもらえますか?

 Microsoft SQL Server 2014-12.0.4100.1(X64)
 2015年4月20日17:29:27 
 Copyright(c)Microsoft Corporation 
 Enterprise Edition:Core-ベースのライセンス(64ビット)
 Windows NT 6.3(Build 9600:)(Hypervisor)
6
gotqn

2番目のインスタンスで新しいマスターキーを作成します。つまり、最初のインスタンスから取得したバックアップから作成しないでください。次に、取得したバックアップから証明書を復元してから、試してください。私はあなたがマスターキーを必要としないと思います、そして、復元目的のために必要なのは証明書だけです。以下の手順に従ってください:

Step1:マスターキーを作成

CREATE MASTER KEY
ENCRYPTION BY PASSWORD = 'MasterKey_Password';

Step2:証明書とpvtキーの権限を確認します

2番目のインスタンスのSQL Serverサービスアカウントに、作成した証明書とpvtキーに対する完全なアクセス許可があることを確認します。

Step3:バックアップから証明書を作成

CREATE CERTIFICATE BackupEncryptTestCert
    FROM FILE = 'E:\GKKeys\SMGK_BACKUP_CERTIFICATE.cer'
     WITH PRIVATE KEY 
      ( 
        FILE = 'E:\GKKeys\SMGK_BACKUP_CERTIFICATE_PRIVATE_KEY.key' ,
        DECRYPTION BY PASSWORD = 'smGK_BackupCertificate_BACKUP_Password'
      ) 

Step4: DBを復元します

10
SQLPRODDBA

コメントはできませんが、この回答に少し詳細を追加したいと思います。

  • データベースマスターキーのパスワードはインスタンス間で一致する必要はありません
  • 秘密キーとパスワードを追加した証明書をバックアップした場合、この秘密キーは既存のデータベースマスターキーとは無関係です。
  • この証明書は、データベースマスターキーを持つ他のインスタンスで.cert、.key、および秘密鍵のパスワードを使用して作成できるようになりました(SQLPRODDBAが言及するようにサービスアカウントに権限がある場合)

証明書のバックアップに関するSQLITYの投稿

sQL Serverでは、すべてのキーは常にパスワードまたは暗号化階層内の別のキーのいずれかによって保護されます。これはバックアップファイルにも当てはまります。バックアップファイルはサイトに保存することを目的としているため、SQL Serverの暗号化階層を使用してそれらを保護することはできません。したがって、キーを保護するためにパスワードを提供する必要があります。

2
marclancy