SQLサーバーバックアップがバックアップを復元せずにTDEで暗号化されているかどうかを確認する方法


13

バックアップがバックアップファイルを復元しようとせずにTDEで暗号化されている場合、SQL ServerバックアップファイルまたはMSDBテーブルから検索する方法はありますか?

ありがとう

回答:


10

1テラバイトのデータベースがあるとします。バックアップにはしばらく時間がかかり、暗号化にはしばらく時間がかかります。想像してみてください:

  • 9:00 AM-完全バックアップを開始します
  • 9:01 AM-別のウィンドウで、データベースでTDEの有効化を開始します
  • 午前9時5分-バックアップが完了する
  • 午前9時10分-TDEの完了

完全バックアップの復元が完了するとすぐに、TDEの適用が続行され、データベースの残りの部分が暗号化されるため、クエリは何を返しますか?

逆に、すでに暗号化されたデータベースから始めて、次のことを想像してください。

  • 9:00 AM-TDEを削除します(時間がかかります)
  • 午前9時1分-完全バックアップを開始する
  • 午前9時5分-データページは暗号化されなくなりました
  • 9:06 AM-完全バックアップが完了しました

クエリが何を返すと思いますか?これらは、TDE暗号化がmsdb.dbo.backupsetに含まれているフィールドの1つではない理由のシナリオ例です


迅速な対応をありがとうございました。@ ScottHodginはいはい、バックアップがTDEデータベースからのものかどうかを知りたかったのですが、Brentの回答から明らかになりました。
yegnasew

@ブレント・オザール:どちらの場合も、「部分的に暗号化されています」というクエリを返す必要があります。はい、これはブール値の代わりにトライステートプロパティを持つことを意味します。明らかに、Microsoftが実装しない限り、このようなプロパティは実際には実現可能ではありません。
ブライアン

@ブライアンビンゴ。現在の状態を考えると、それは現実的ではありません。
ブレントオザー

30

バックアップにTDEデータが含まれているかどうかについて、彼のシナリオが間違いなく混乱を招く可能性があるため、私はブレントの回答に賛成票を投じました。

ただし、TDEをしばらく有効にしていた場合は、RESTORE FILELISTONLY(Transact-SQL) 目的の情報を提供しているようです。結果セットにはTDEThumbprint、「データベース暗号化キーの拇印を表示します。暗号化ツールの拇印は、キーの暗号化に使用された証明書のSHA-1ハッシュです」という列があります。

TDE暗号化とTDE暗号化の両方が行われていないバックアップの一部を確認しました。

TDEデータベースのバックアップの列には証明書の拇印があり、TDEデータベースのないバックアップにはnullがありました。


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'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.