Como descobrir se o backup do SQL Server está criptografado com o TDE sem restaurar o backup

13

Existe uma maneira de localizar, a partir do arquivo de backup do SQL Server ou das tabelas do MSDB, se o backup é criptografado com o TDE sem tentar restaurar o arquivo de backup?

obrigado

yegnasew
fonte

Respostas:

10

Imagine por um segundo que você tem um banco de dados de 1 terabyte. O backup demora um pouco e a criptografia demora um pouco. Então imagine que:

  • 9:00 - você começa a fazer um backup completo
  • 9:01 - em outra janela, você começa a ativar o TDE no banco de dados
  • 9:05 - o backup é concluído
  • 9:10 - TDE é concluído

O que você esperaria que sua consulta retornasse, já que assim que você terminar de restaurar o backup completo, ele continuará aplicando o TDE, criptografando o restante do seu banco de dados?

Por outro lado, imagine que você comece com um banco de dados já criptografado e:

  • 9:00 - você remove o TDE (o que leva algum tempo)
  • 9:01 - você inicia um backup completo
  • 9:05 - as páginas de dados não são mais criptografadas
  • 9:06 - seu backup completo é concluído

O que você esperaria que a consulta retornasse? Estes são exemplos de cenários dos motivos pelos quais a criptografia TDE não é um dos campos incluídos no msdb.dbo.backupset .

Brent Ozar
fonte
Obrigado a todos por uma resposta rápida e @ScottHodgin sim, eu queria saber se o backup é de um banco de dados TDE e a resposta de Brent deixou claro.
precisa saber é o seguinte
@ Brent Ozar: Nos dois casos, eu gostaria que a consulta retornasse "Parcialmente criptografada". Sim, isso significa ter uma propriedade de 3 estados em vez de um booleano. Obviamente, essa propriedade não é realmente viável, a menos que a Microsoft a implemente.
Brian
@Brian bingo. Não é viável, dado o estado atual.
Brent Ozar
30

Votei positivamente na resposta de Brent , já que o cenário dele definitivamente poderia turvar a água sobre se o backup continha dados da TDE.

No entanto, se você tiver ativado o TDE por um tempo, parece que RESTORE FILELISTONLY (Transact-SQL) pode fornecer as informações que você procura . Há uma coluna no conjunto de resultados chamada TDEThumbprint"Mostra a impressão digital da Chave de Criptografia do Banco de Dados. A impressão digital do criptografador é um hash SHA-1 do certificado com o qual a chave está criptografada".

Eu olhei para alguns dos meus backups que estavam criptografados com TDE e não com TDE.

Os backups dos meus bancos de dados TDE tinham a impressão digital do certificado nessa coluna e os backups que não tinham bancos de dados TDE tinham nulo.

Scott Hodgin
fonte
2

Estendendo a resposta de Scott, aqui está a consulta SQL que informará se um backup está criptografado ou não.

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
fonte