Ответы:
Представьте на секунду, что у вас есть база данных объемом 1 терабайт. Резервное копирование занимает некоторое время, а шифрование - некоторое время. Итак, представьте, что:
Что вы ожидаете получить от вашего запроса, учитывая, что как только вы закончите восстановление полной резервной копии, он продолжит применять TDE, шифруя остальную часть вашей базы данных?
И наоборот, представьте, что вы начинаете с уже зашифрованной базы данных и:
Что вы ожидаете от запроса? Это примеры сценариев того, почему шифрование TDE не входит в число полей, включенных в msdb.dbo.backupset .
Я проголосовал за ответ Брента , так как его сценарий определенно мог затормозить вопрос о том, содержит ли резервная копия данные TDE.
Однако, если у вас некоторое время был включен TDE, кажется, что RESTORE FILELISTONLY (Transact-SQL) может предоставить информацию, которую вы ищете. В наборе результатов есть столбец, TDEThumbprintкоторый называется «Показывает отпечаток ключа шифрования базы данных. Отпечаток шифратора представляет собой хэш SHA-1 сертификата, с помощью которого ключ шифруется».
Я посмотрел на некоторые из моих резервных копий, которые были зашифрованы TDE и не зашифрованы TDE.
Резервные копии моих баз данных TDE имели отпечаток сертификата в этом столбце, а резервные копии, в которых не было баз данных TDE, имели нулевое значение.
Расширяя ответ Скотта, вот SQL-запрос, который сообщит вам, зашифрована ли резервная копия или нет.
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'