Antworten:
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:
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:
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 .
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.
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'