Answers:
想象一下,您拥有一个1 TB的数据库。备份需要一段时间,而加密则需要一段时间。想象一下:
鉴于一旦完成完整备份的还原,它将继续应用TDE,对数据库的其余部分进行加密,查询将返回什么?
相反,假设您从一个已经加密的数据库开始,然后:
您希望查询返回什么?这些是为什么TDE加密不是msdb.dbo.backupset包含的字段之一的示例场景。
我赞成布伦特的答案,因为他的情况肯定会弄糟备份是否包含TDE数据。
但是,如果您已经启用TDE一段时间,似乎RESTORE FILELISTONLY(Transact-SQL) 可能会提供您所需要的信息。结果集上有一列称为TDEThumbprint
“显示数据库加密密钥的指纹。加密器指纹是使用密钥加密的证书的SHA-1哈希”。
我查看了一些同时经过TDE加密和未TDE加密的备份。
我的TDE数据库的备份在该列中具有证书指纹,而没有TDE数据库的备份为空。
扩展Scott的答案,这是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'