Bagaimana menemukan apakah cadangan server SQL dienkripsi dengan TDE tanpa mengembalikan cadangan

13

Apakah ada cara untuk menemukan dari file SQL Server Backup atau tabel MSDB jika cadangan dienkripsi dengan TDE tanpa mencoba mengembalikan file cadangan?

Terima kasih

yegnasew
sumber

Jawaban:

10

Bayangkan sejenak bahwa Anda memiliki basis data 1 terabyte. Mencadangkannya membutuhkan waktu, dan mengenkripsinya membutuhkan waktu. Jadi bayangkan itu:

  • 9:00 pagi - Anda mulai mengambil cadangan penuh
  • 9:01 pagi - di jendela lain, Anda mulai mengaktifkan TDE pada basis data
  • 9:05 - pencadangan selesai
  • 9:10 pagi - TDE selesai

Apa yang Anda harapkan akan dikembalikan oleh kueri, mengingat begitu Anda selesai memulihkan cadangan penuh, ia akan terus menerapkan TDE, mengenkripsi seluruh basis data Anda?

Sebaliknya, bayangkan Anda mulai dengan database yang sudah dienkripsi, dan:

  • 9:00 pagi - Anda menghapus TDE (yang membutuhkan waktu)
  • 9:01 pagi - Anda memulai pencadangan penuh
  • 9:05 pagi - halaman data tidak lagi dienkripsi
  • 9:06 pagi - cadangan lengkap Anda selesai

Apa yang Anda harapkan akan dikembalikan oleh query? Ini adalah contoh skenario mengapa enkripsi TDE bukan merupakan salah satu bidang yang termasuk dalam msdb.dbo.backupset .

Brent Ozar
sumber
Terima kasih atas tanggapan cepat dan @ScottHodgin ya saya ingin tahu apakah cadangannya berasal dari basis data TDE dan jawaban Brent membuatnya jelas.
yegnasew
@Brent Ozar: Dalam kedua kasus, saya ingin kueri kembali, "Dienkripsi sebagian." Ya, ini berarti memiliki properti 3-negara alih-alih boolean. Jelas properti seperti itu tidak benar-benar layak kecuali Microsoft mengimplementasikannya.
Brian
Bingo @Brian Ini tidak layak mengingat keadaan saat ini.
Brent Ozar
30

Saya memilih jawaban Brent , karena skenarionya pasti dapat mengeruhkan air apakah cadangan berisi data TDE.

Namun, jika Anda telah mengaktifkan TDE untuk sementara waktu, tampaknya RESTORE FILELISTONLY (Transact-SQL) mungkin memberikan informasi yang Anda cari. Ada kolom pada set hasil yang disebut TDEThumbprint"Menunjukkan cap jempol dari Kunci Enkripsi Database. Cap jempol enkripsi adalah hash SHA-1 dari sertifikat yang dengannya kunci dienkripsi."

Saya melihat beberapa backup saya yang dienkripsi TDE dan bukan TDE terenkripsi.

Cadangan basis data TDE saya memiliki cap jempol sertifikat di kolom itu dan cadangan yang tidak memiliki basis data TDE nol.

Scott Hodgin
sumber
2

Extending Scott's Answer, di sini adalah SQL Query yang akan memberi tahu Anda jika cadangan dienkripsi atau tidak.

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'
Anthony Genovese
sumber