Як дізнатися, чи резервна копія сервера SQL зашифрована за допомогою TDE без відновлення резервної копії


13

Чи є спосіб знайти з файлу резервного копіювання файлів SQL Server або таблиць MSDB, якщо резервна копія зашифрована TDE, не намагаючись відновити файл резервної копії?

Дякую

Відповіді:


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, і відповідь Brent дала зрозуміти.
yegnasew

@Brent Ozar: В обох випадках я хотів би, щоб запит повернувся "Частково зашифрований". Так, це означає мати 3-державне властивість замість булевого. Очевидно, таке властивість насправді неможливо здійснити, якщо Microsoft не реалізує його.
Брайан

@Brian bingo. Це неможливо з огляду на сучасний стан.
Брент Озар

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'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.