yegnasew Asked: 2019-04-02 09:20:29 +0800 CST2019-04-02 09:20:29 +0800 CST 2019-04-02 09:20:29 +0800 CST 如何在不恢复备份的情况下查找 SQL Server 备份是否使用 TDE 加密 772 如果备份使用 TDE 加密而不尝试还原备份文件,是否可以从 SQL Server 备份文件或 MSDB 表中查找? 谢谢 sql-server 3 个回答 Voted Scott Hodgin - Retired 2019-04-02T09:57:01+08:002019-04-02T09:57:01+08:00 我对Brent 的回答投了赞成票,因为他的方案肯定会混淆备份是否包含 TDE 数据。 但是,如果您已启用 TDE 一段时间,似乎RESTORE FILELISTONLY (Transact-SQL) 可能会提供您所需要的信息。结果集上有一个名为TDEThumbprint“显示数据库加密密钥的指纹。加密器指纹是加密密钥的证书的 SHA-1 哈希”的列。 我查看了一些既是 TDE 加密又不是 TDE 加密的备份。 我的 TDE 数据库的备份在该列中有证书指纹,没有 TDE 数据库的备份为空。 Best Answer Brent Ozar 2019-04-02T09:27:41+08:002019-04-02T09:27:41+08:00 想象一下,您有一个 1 TB 的数据库。备份需要一段时间,加密需要一段时间。所以想象一下: 上午 9:00 - 您开始进行完整备份 9:01 AM - 在另一个窗口中,您开始在数据库上启用 TDE 上午 9:05 - 备份完成 上午 9:10 - TDE 完成 鉴于一旦完成恢复完整备份,它将继续应用 TDE,加密数据库的其余部分,您希望查询返回什么? 相反,假设您从一个已经加密的数据库开始,并且: 上午 9:00 - 您删除 TDE(这需要一些时间) 上午 9:01 - 您开始完整备份 上午 9:05 - 数据页不再加密 上午 9:06 - 您的完整备份完成 您希望查询返回什么?这些是 TDE 加密为什么不是msdb.dbo.backupset中包含的字段之一的示例场景。 Anthony Genovese 2019-10-30T15:04:18+08:002019-10-30T15:04:18+08:00 扩展 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'
我对Brent 的回答投了赞成票,因为他的方案肯定会混淆备份是否包含 TDE 数据。
但是,如果您已启用 TDE 一段时间,似乎RESTORE FILELISTONLY (Transact-SQL) 可能会提供您所需要的信息。结果集上有一个名为
TDEThumbprint
“显示数据库加密密钥的指纹。加密器指纹是加密密钥的证书的 SHA-1 哈希”的列。我查看了一些既是 TDE 加密又不是 TDE 加密的备份。
我的 TDE 数据库的备份在该列中有证书指纹,没有 TDE 数据库的备份为空。
想象一下,您有一个 1 TB 的数据库。备份需要一段时间,加密需要一段时间。所以想象一下:
鉴于一旦完成恢复完整备份,它将继续应用 TDE,加密数据库的其余部分,您希望查询返回什么?
相反,假设您从一个已经加密的数据库开始,并且:
您希望查询返回什么?这些是 TDE 加密为什么不是msdb.dbo.backupset中包含的字段之一的示例场景。
扩展 Scott 的回答,这里是 SQL 查询,它将告诉您备份是否已加密。