Как узнать, зашифрована ли резервная копия сервера SQL с помощью TDE, не восстанавливая резервную копию

13

Есть ли способ найти файл резервной копии SQL Server или таблицы MSDB, если резервная копия зашифрована с помощью TDE, не пытаясь восстановить файл резервной копии?

Спасибо

yegnasew
источник

Ответы:

10

Представьте на секунду, что у вас есть база данных объемом 1 терабайт. Резервное копирование занимает некоторое время, а шифрование - некоторое время. Итак, представьте, что:

  • 9:00 утра - вы начинаете делать полную резервную копию
  • 9:01 утра - в другом окне вы начинаете включать TDE в базе данных
  • 9:05 - резервное копирование завершено
  • 9:10 утра - TDE завершает

Что вы ожидаете получить от вашего запроса, учитывая, что как только вы закончите восстановление полной резервной копии, он продолжит применять TDE, шифруя остальную часть вашей базы данных?

И наоборот, представьте, что вы начинаете с уже зашифрованной базы данных и:

  • 9:00 утра - вы удаляете TDE (что занимает некоторое время)
  • 9:01 утра - вы начинаете полное резервное копирование
  • 9:05 - страницы данных больше не шифруются
  • 9:06 утра - ваше полное резервное копирование завершено

Что вы ожидаете от запроса? Это примеры сценариев того, почему шифрование TDE не входит в число полей, включенных в msdb.dbo.backupset .

Брент Озар
источник
Спасибо всем за быстрый ответ и @ScottHodgin: да, я хотел бы знать, является ли резервная копия из базы данных TDE, и ответ Брента прояснил это.
yegnasew
@ Брент Озар: В обоих случаях я хотел бы, чтобы запрос возвращал: «Частично зашифрован». Да, это означает наличие свойства с 3 состояниями вместо логического. Очевидно, что такое свойство нереально, если Microsoft не реализует его.
Брайан
@ Брайан Бинго. Это не осуществимо, учитывая текущее состояние.
Брент Озар
30

Я проголосовал за ответ Брента , так как его сценарий определенно мог затормозить вопрос о том, содержит ли резервная копия данные TDE.

Однако, если у вас некоторое время был включен TDE, кажется, что RESTORE FILELISTONLY (Transact-SQL) может предоставить информацию, которую вы ищете. В наборе результатов есть столбец, TDEThumbprintкоторый называется «Показывает отпечаток ключа шифрования базы данных. Отпечаток шифратора представляет собой хэш SHA-1 сертификата, с помощью которого ключ шифруется».

Я посмотрел на некоторые из моих резервных копий, которые были зашифрованы TDE и не зашифрованы TDE.

Резервные копии моих баз данных TDE имели отпечаток сертификата в этом столбце, а резервные копии, в которых не было баз данных TDE, имели нулевое значение.

Скотт Ходжин
источник
2

Расширяя ответ Скотта, вот 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'
Энтони Дженовезе
источник