Tôi đang cố gắng sao lưu khóa chính cho cơ sở dữ liệu TDE, nhưng SQL Server cho biết không có khóa nào. Hơi lạ một chút, nhưng tôi chắc chắn mình đang làm sai điều gì đó. Tôi là sysadmin trên máy chủ, vì vậy tôi có thể thấy mọi thứ.
Đây là tuyên bố thất bại:
USE [my_db];
BACKUP MASTER KEY
TO FILE = 'C:\master_key'
ENCRYPTION BY PASSWORD = 'some_killer_password';
Và thông báo lỗi trả về:
Msg 15151, Cấp 16, Trạng thái 1, Dòng 11
Không thể tìm thấy khóa đối xứng 'khóa chính', vì nó không tồn tại hoặc bạn không có quyền.
Tôi đã sử dụng cách sau để xem chi tiết về khóa mã hóa cơ sở dữ liệu và chứng chỉ được liên kết, tuy nhiên chi tiết chứng chỉ từ sys.certificates
bảng trống.
USE [my_db];
SELECT DatabaseName = d.name
, ddek.encryptor_type
, ddek.opened_date
, c.name
, c.cert_serial_number
, c.pvt_key_encryption_type_desc
, c.subject
FROM sys.dm_database_encryption_keys ddek
INNER JOIN sys.databases d ON ddek.database_id = d.database_id
LEFT JOIN sys.certificates c ON ddek.encryptor_thumbprint = c.thumbprint
WHERE d.name <> 'tempdb' /* tempdb is auto-encrypted by SQL Server */
╔══════════════╦════════════════╦═════════════════ ════════╦══════╦════════════════════╦═════════════ ═════════════════╦═════════╗ ║ DatabaseName ryptor_type ║ open_date ║ name cert_serial_number pvt_key_encoding_type_desc ║ chủ đề ╠══════════════╬════════════════╬═════════════════ ════════╬══════╬════════════════════╬═════════════ ═════════════════╬═════════╣ ║ my_db GIẤY CHỨNG NHẬN ║ 2017-09-20 11: 24: 13,590 NULL NULL NULL NULL ╚══════════════╩════════════════╩═════════════════ ════════╩══════╩════════════════════╩═════════════ ═════════════════╩═════════╝
Vì vậy, tôi có thể thấy khóa mã hóa cơ sở dữ liệu [my_db]
và tôi có thể thấy nó được mã hóa bởi một chứng chỉ, nhưng chứng chỉ không tồn tại?