SQL Server Encryption Production 資料庫加密實務指南

2025-10-27

筆記關於 SQL Server 資料庫加密的實務指南

SQL Server Logo

說明

要進行 TDE 或者是 Backup Encryption 的加密作業前,都需要於 Master 資料庫建立 Database Master Key

USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Password';
GO

Database Master Key 是透過 SQL Server Instance 的 Service Master Key 進行加密保護。然而不需要特別針對 Service Master Key 進行管理,即使遺失 Database Master Key 的密碼,也可以透過 Alter Master Key 指令來重新指定密碼。

如果要查詢 Database Master Key 是否已經建立,可以透過以下方式查詢:

Use master;
SELECT * 
FROM sys.symmetric_keys
WHERE name = '##MS_DatabaseMasterKey##';

Database Master Key 只能建立一個,重複建立會有錯誤訊息。而每個資料庫都可以擁有自己的 Database Master Key。但在 TDE 與 Backup Encryption 的加密作業中,都是使用 Master 資料庫的 Database Master Key。

憑證

擁有 Database Master Key 後可以建立用於加密的憑證 (Certificate),憑證的名稱與主題描述,可以自行定義。

USE master;
GO
CREATE CERTIFICATE BackupEncryptionCert
WITH SUBJECT = 'Certificate for Backup Encryption 2025';
GO

CREATE CERTIFICATE TDECert
WITH SUBJECT = 'Certificate for Transparent Data Encryption 2025';
GO

憑證可以進行備份匯出,特別的是匯出憑證不需要輸入 Database Master Key 的密碼,並且可以另外指定私密金鑰的密碼來進行保護。

BACKUP CERTIFICATE BackupEncryptionCert
TO FILE = 'D:\Backup\BackupEncryptionCert.cer'
WITH PRIVATE KEY (
    FILE = 'D:\Backup\BackupEncryptionCert_PrivateKey.pvk',
    ENCRYPTION BY PASSWORD = 'Password'
);
GO

在匯入到其他資料庫實體時,是透過指定的私密金鑰密碼來進行匯入。

CREATE CERTIFICATE BackupEncryptionCert
FROM FILE = 'D:\Backup\BackupEncryptionCert.cer'
WITH PRIVATE KEY (
    FILE = 'D:\Backup\BackupEncryptionCert_PrivateKey.pvk',
    DECRYPTION BY PASSWORD = 'Password'
);
GO

實務的細節上,TDE 是透過憑證來加密資料庫的加密金鑰 (Database Encryption Key),而 Backup Encryption 則是直接使用憑證來加密備份檔案,因此在管理上需要特別注意憑證的保存與備份

如果資料庫伺服器發生災難,只剩下 MDF, LDF 檔案,在有 TDE 加密的情況下,必須要有憑證才能進行資料庫的還原;只有 bak 檔案的情況下,如果有進行 Backup Encryption,同樣也需要憑證才能進行還原。

憑證期限

預設建立的憑證會有一年的有效期限,但可以在建立憑證時指定有效期限 (EXPIRY_DATE)。

對於 TDE 而言,即使憑證過期,資料庫仍然可以正常運作,而如果要更換憑證必須建立新的憑證,並且重新設定 TDE 的加密金鑰 (Database Encryption Key)。

USE master;
CREATE CERTIFICATE TDECert
WITH SUBJECT = 'Certificate for Transparent Data Encryption 2026';
GO

USE MyDatabase;
GO
ALTER DATABASE ENCRYPTION KEY
REGENERATE WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE TDECert_New;
GO

對於 Backup Encryption 而言,當憑證過期後,將無法進行新的備份加密作業,但已存在的加密備份檔仍然可以還原,也必須透過此過期的憑證來進行還原,因此在新舊憑證交接期間,必須同時保有新舊兩個憑證,以正確作業備份資料的加密與還原