Відповіді:
Уявіть собі на секунду, що у вас є база даних на 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'