web-dev-qa-db-fra.com

Restauration de la base de données chiffrée sur un autre serveur (à l'aide du chiffrement de sauvegarde)

J'ai deux instances SQL Server sur la même machine. Je veux créer une sauvegarde cryptée sur l'une des bases de données, puis la restaurer sur la deuxième instance. Je fais les étapes suivantes:

  1. Créer et sauvegarder la clé principale de la base de données dans la base de données master qui va être utilisée pour crypter nos certificats

    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. Créez et sauvegardez le certificat qui sera utilisé pour le chiffrement:

    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. Création de la sauvegarde:

    BACKUP DATABASE smGK
    TO DISK = 'E:\GKKeys\smGKFULLEncrtypted.back'
    WITH COMPRESSION, STATS = 10, ENCRYPTION (ALGORITHM = AES_256,SERVER CERTIFICATE = BackupEncryptTestCert)
    
  4. Maintenant, sur la deuxième instance, je veux restaurer le master key mais je ne suis pas autorisé:

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

    Msg 15317, niveau 16, état 2, ligne 4 Le fichier de clé principale n'existe pas ou a un format non valide.

Quelqu'un pourrait-il dire ce qui cause cela?

 Microsoft SQL Server 2014 - 12.0.4100.1 (X64) 
 20 avril 2015 17:29:27 
 Copyright (c) Microsoft Corporation 
 Enterprise Edition: Core- Licence basée sur (64 bits) sur 
 Windows NT 6.3 (Build 9600:) (Hyperviseur) 
6
gotqn

Créez une nouvelle clé principale sur votre deuxième instance. c'est-à-dire ne le créez pas à partir de la sauvegarde que vous avez prise de la première instance. Restaurez ensuite le certificat à partir de la sauvegarde effectuée, puis essayez. Je suppose que vous n'avez pas besoin de clé principale et que seul un certificat est requis à des fins de restauration. Suivez les étapes ci-dessous:

Étape 1: Créer une clé principale

CREATE MASTER KEY
ENCRYPTION BY PASSWORD = 'MasterKey_Password';

Step2: Vérifiez les autorisations sur les clés cert et pvt

Assurez-vous que le compte de service SQL Server de la deuxième instance dispose des autorisations complètes sur les clés cert et pvt que vous avez créées.

Étape3: Créer un certificat à partir de la sauvegarde

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: Restaurer la base de données

10
SQLPRODDBA

Je ne peux pas commenter mais je voudrais ajouter un peu de détails à cette réponse.

  • Les mots de passe de la clé principale de la base de données n'ont pas besoin de correspondre entre les instances
  • Lorsque vous avez sauvegardé le certificat auquel vous avez ajouté une clé privée et un mot de passe, cette clé privée est indépendante de la clé principale de base de données existante.
  • Ce certificat peut maintenant être créé à l'aide du mot de passe .cert, .key et de la clé privée sur toute autre instance qui possède une clé principale de base de données (tant que le compte de service dispose des autorisations comme le mentionne SQLPRODDBA)

publication SQLITY sur la sauvegarde des certificats

dans SQL Server, toutes les clés sont à tout moment protégées par un mot de passe ou par une autre clé dans la hiérarchie de chiffrement. Cela s'étend également aux fichiers de sauvegarde. Étant donné que les fichiers de sauvegarde sont destinés à être stockés sur le site, la hiérarchie de chiffrement SQL Server n'est pas disponible pour les protéger. Par conséquent, nous devons fournir un mot de passe pour protéger la clé.

2
marclancy