Comment savoir si la sauvegarde du serveur SQL est chiffrée avec TDE sans restaurer la sauvegarde

13

Existe-t-il un moyen de trouver à partir du fichier de sauvegarde SQL Server ou des tables MSDB si la sauvegarde est chiffrée avec TDE sans essayer de restaurer le fichier de sauvegarde?

Merci

yegnasew
la source

Réponses:

10

Imaginez une seconde que vous avez une base de données de 1 téraoctet. La sauvegarde prend du temps et son cryptage prend du temps. Imaginez donc que:

  • 9h00 - vous commencez à effectuer une sauvegarde complète
  • 9h01 - dans une autre fenêtre, vous commencez à activer TDE sur la base de données
  • 9 h 05 - la sauvegarde est terminée
  • 9 h 10 - TDE terminé

À quoi vous attendriez-vous que votre requête renvoie, étant donné que dès que vous aurez terminé de restaurer la sauvegarde complète, elle continuera à appliquer TDE, en chiffrant le reste de votre base de données?

Inversement, imaginez que vous commencez avec une base de données déjà chiffrée et:

  • 9h00 - vous supprimez TDE (ce qui prend un certain temps)
  • 9h01 - vous démarrez une sauvegarde complète
  • 9h05 - les pages de données ne sont plus cryptées
  • 9 h 06 - votre sauvegarde complète est terminée

À quoi vous attendriez-vous que la requête renvoie? Ce sont des exemples de scénarios expliquant pourquoi le chiffrement TDE n'est pas l'un des champs inclus dans msdb.dbo.backupset .

Brent Ozar
la source
Merci à tous pour une réponse rapide et @ScottHodgin oui, je voulais savoir si la sauvegarde provient d'une base de données TDE et la réponse de Brent l'a clairement indiqué.
yegnasew
@Brent Ozar: Dans les deux cas, je voudrais que la requête retourne, "Partiellement chiffrée". Oui, cela signifie avoir une propriété à 3 états au lieu d'un booléen. De toute évidence, une telle propriété n'est vraiment réalisable que si Microsoft l'implémente.
Brian
@Brian bingo. Ce n'est pas faisable compte tenu de l'état actuel.
Brent Ozar
30

J'ai voté contre la réponse de Brent , car son scénario pourrait certainement brouiller la question de savoir si la sauvegarde contenait des données TDE.

Cependant, si TDE est activé depuis un certain temps, il semble que RESTORE FILELISTONLY (Transact-SQL) puisse fournir les informations que vous recherchez. Il y a une colonne sur l'ensemble de résultats appelée TDEThumbprint"Affiche l'empreinte numérique de la clé de chiffrement de la base de données. L'empreinte numérique du chiffreur est un hachage SHA-1 du certificat avec lequel la clé est chiffrée".

J'ai regardé certaines de mes sauvegardes qui étaient à la fois cryptées TDE et non cryptées TDE.

Les sauvegardes de mes bases de données TDE avaient l'empreinte numérique du certificat dans cette colonne et les sauvegardes qui n'avaient pas de bases de données TDE étaient nulles.

Scott Hodgin
la source
2

En étendant la réponse de Scott, voici la requête SQL qui vous dira si une sauvegarde est chiffrée ou non.

Declare @backupFile varchar(max) = 'J:\backups\psa20191029.bak'

 DECLARE @fileListTable TABLE (
    [LogicalName]           NVARCHAR(128),
    [PhysicalName]          NVARCHAR(260),
    [Type]                  CHAR(1),
    [FileGroupName]         NVARCHAR(128),
    [Size]                  NUMERIC(20,0),
    [MaxSize]               NUMERIC(20,0),
    [FileID]                BIGINT,
    [CreateLSN]             NUMERIC(25,0),
    [DropLSN]               NUMERIC(25,0),
    [UniqueID]              UNIQUEIDENTIFIER,
    [ReadOnlyLSN]           NUMERIC(25,0),
    [ReadWriteLSN]          NUMERIC(25,0),
    [BackupSizeInBytes]     BIGINT,
    [SourceBlockSize]       INT,
    [FileGroupID]           INT,
    [LogGroupGUID]          UNIQUEIDENTIFIER,
    [DifferentialBaseLSN]   NUMERIC(25,0),
    [DifferentialBaseGUID]  UNIQUEIDENTIFIER,
    [IsReadOnly]            BIT,
    [IsPresent]             BIT,
    [TDEThumbprint]         VARBINARY(32) -- remove this column if using SQL 2005
)
INSERT INTO @fileListTable EXEC('RESTORE FILELISTONLY FROM DISK = '''+@backupFile+'''')


select distinct LogicalName + case when TDEThumbprint is null then ' is not encrypted'
                                    else ' is encrypted'
                                    end as AmIEncrypted
from @fileListTable
where type='D'
Anthony Genovese
la source