So finden Sie heraus, ob die SQL Server-Sicherung mit TDE verschlüsselt ist, ohne die Sicherung wiederherzustellen

13

Gibt es eine Möglichkeit, anhand der SQL Server-Sicherungsdatei oder der MSDB-Tabellen zu ermitteln, ob die Sicherung mit TDE verschlüsselt ist, ohne zu versuchen, die Sicherungsdatei wiederherzustellen?

Vielen Dank

yegnasew
quelle

Antworten:

10

Stellen Sie sich für eine Sekunde vor, Sie hätten eine 1-Terabyte-Datenbank. Das Sichern dauert eine Weile, und das Verschlüsseln dauert eine Weile. Stellen Sie sich vor:

  • 9:00 Uhr - Sie beginnen mit der Erstellung eines vollständigen Backups
  • 9:01 Uhr - In einem anderen Fenster aktivieren Sie TDE in der Datenbank
  • 9:05 Uhr - Die Sicherung ist abgeschlossen
  • 9:10 Uhr - TDE ist abgeschlossen

Was würden Sie von Ihrer Abfrage erwarten, wenn Sie nach Abschluss der Wiederherstellung der vollständigen Sicherung weiterhin TDE anwenden und den Rest Ihrer Datenbank verschlüsseln?

Stellen Sie sich umgekehrt vor, Sie beginnen mit einer bereits verschlüsselten Datenbank und:

  • 9:00 Uhr - Sie entfernen TDE (was einige Zeit dauert)
  • 9:01 Uhr - Sie starten eine vollständige Sicherung
  • 9:05 Uhr - Die Datenseiten werden nicht mehr verschlüsselt
  • 9:06 Uhr - Ihre vollständige Sicherung ist abgeschlossen

Was würden Sie von der Abfrage erwarten? Dies sind Beispielszenarien, warum die TDE-Verschlüsselung nicht zu den Feldern in msdb.dbo.backupset gehört .

Brent Ozar
quelle
Vielen Dank für eine schnelle Antwort und @ScottHodgin Ja, ich wollte wissen, ob das Backup aus einer TDE-Datenbank stammt, und Brents Antwort machte es klar.
Yegnasew
@Brent Ozar: In beiden Fällen möchte ich, dass die Abfrage "Teilweise verschlüsselt" zurückgibt. Ja, dies bedeutet, dass eine 3-Status-Eigenschaft anstelle eines Booleschen Werts vorhanden ist. Offensichtlich ist eine solche Eigenschaft nur dann realisierbar, wenn Microsoft sie implementiert.
Brian
@ Brian Bingo. Es ist angesichts des aktuellen Zustands nicht machbar.
Brent Ozar
30

Ich habe Brents Antwort positiv bewertet , da sein Szenario definitiv das Wasser trüben könnte, ob das Backup TDE-Daten enthält.

Wenn Sie TDE jedoch für eine Weile aktiviert haben, scheint es, dass RESTORE FILELISTONLY (Transact-SQL) die gewünschten Informationen bereitstellt. In der Ergebnismenge befindet sich eine Spalte mit dem Namen TDEThumbprint"Zeigt den Fingerabdruck des Datenbankverschlüsselungsschlüssels an. Der Fingerabdruck des Verschlüsselers ist ein SHA-1-Hash des Zertifikats, mit dem der Schlüssel verschlüsselt wird."

Ich habe mir einige meiner Backups angesehen, die sowohl TDE-verschlüsselt als auch nicht TDE-verschlüsselt waren.

Die Sicherungen meiner TDE-Datenbanken hatten den Zertifikat-Fingerabdruck in dieser Spalte, und die Sicherungen ohne TDE-Datenbanken hatten null.

Scott Hodgin
quelle
2

Hier ist die SQL-Abfrage, die Ihnen sagt, ob eine Sicherung verschlüsselt ist oder nicht.

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
quelle