Cách tìm kiếm nếu sao lưu máy chủ SQL được mã hóa bằng TDE mà không cần khôi phục bản sao lưu


13

Có cách nào để tìm từ tệp Sao lưu SQL Server hoặc bảng MSDB nếu bản sao lưu được mã hóa bằng TDE mà không cố gắng khôi phục tệp sao lưu không?

Cảm ơn

Câu trả lời:


10

Hãy tưởng tượng trong một giây rằng bạn đã có cơ sở dữ liệu 1 terabyte. Sao lưu nó mất một lúc và mã hóa nó mất một lúc. Hãy tưởng tượng rằng:

  • 9:00 - bạn bắt đầu sao lưu toàn bộ
  • 9:01 AM - trong một cửa sổ khác, bạn bắt đầu bật TDE trên cơ sở dữ liệu
  • 9:05 - sao lưu hoàn tất
  • 9:10 AM - TDE hoàn thành

Bạn mong muốn truy vấn của mình sẽ trả về điều gì, ngay khi bạn hoàn tất khôi phục bản sao lưu đầy đủ, nó sẽ tiếp tục áp dụng TDE, mã hóa phần còn lại của cơ sở dữ liệu của bạn?

Ngược lại, hãy tưởng tượng rằng bạn bắt đầu với một cơ sở dữ liệu đã được mã hóa và:

  • 9:00 - bạn xóa TDE (mất một chút thời gian)
  • 9:01 AM - bạn bắt đầu sao lưu toàn bộ
  • 9:05 - các trang dữ liệu không còn được mã hóa
  • 9:06 AM - bản sao lưu đầy đủ của bạn hoàn tất

Những gì bạn sẽ mong đợi các truy vấn trở lại? Đây là các kịch bản ví dụ về lý do tại sao mã hóa TDE không phải là một trong các trường được bao gồm trong msdb.dbo.backupset .


Cảm ơn tất cả các bạn đã phản hồi nhanh chóng và @ScottHodgin có Tôi muốn biết liệu bản sao lưu có phải từ cơ sở dữ liệu TDE hay không và câu trả lời của Brent đã làm cho nó rõ ràng.
yegnasew

@Brent Ozar: Trong cả hai trường hợp, tôi muốn truy vấn trở lại, "Mã hóa một phần." Vâng, điều này có nghĩa là có một tài sản 3 trạng thái thay vì boolean. Rõ ràng một tài sản như vậy là không thực sự khả thi trừ khi Microsoft thực hiện nó.
Brian

@ Chơi lô tô. Nó không khả thi với tình trạng hiện tại.
Brent Ozar

30

Tôi đã bình chọn câu trả lời của Brent , vì kịch bản của anh ấy chắc chắn có thể làm vấy bẩn nước về việc bản sao lưu có chứa dữ liệu TDE hay không.

Tuy nhiên, nếu bạn đã kích hoạt TDE trong một thời gian, có vẻ như RESTORE FILELISTONLY (Transact-SQL) có thể cung cấp thông tin mà bạn theo dõi. Có một cột trên tập kết quả được gọi là TDEThumbprint"Hiển thị dấu vân tay của Khóa mã hóa cơ sở dữ liệu. Dấu vân tay của người mã hóa là hàm băm SHA-1 của chứng chỉ mà khóa được mã hóa."

Tôi đã xem xét một số bản sao lưu của mình, cả mã hóa TDE và không mã hóa TDE.

Các bản sao lưu cơ sở dữ liệu TDE của tôi có dấu vân tay chứng chỉ trong cột đó và các bản sao lưu không có cơ sở dữ liệu TDE là null.


2

Mở rộng Câu trả lời của Scott, đây là Truy vấn SQL sẽ cho bạn biết bản sao lưu có được mã hóa hay không.

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'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.