了解透明資料加密 (TDE)

您可以採取幾個預防措施來維護資料庫安全,例如設計安全的系統、加密機密的資產,以及在資料庫伺服器周圍建立防火牆。但是,當發生實體媒體 (如磁碟機或備份磁帶) 遭竊的狀況時,惡意人士可以還原或附加資料庫,並瀏覽資料。一個解決方案是加密資料庫中的敏感性資料,並使用憑證來保護用來加密資料的金鑰。如此可防止沒有金鑰的任何人使用資料,但是這種防護類型必須事先規劃。

「透明資料加密」(Transparent Data Encryption,TDE) 會執行資料和記錄檔的即時 I/O 加密和解密。此加密會使用資料庫加密金鑰 (DEK),該金鑰儲存於資料庫開機記錄中,以便在復原期間可供使用。DEK 是對稱金鑰,而其維護安全的方式是使用儲存於伺服器之 master 資料庫內的憑證或是受到 EKM 模組所保護的非對稱金鑰。TDE 會保護休眠的資料,也就是資料檔和記錄檔。它提供了與各個不同業界內建立的許多法令、規章和指導方針相符的能力,如此可讓軟體開發人員使用 AES 和 3DES 加密演算法加密資料,而不需要變更現有的應用程式。

重要注意事項重要事項

TDE 不會提供跨通訊通道的加密。如需有關如何跨通訊通道加密資料的詳細資訊,請參閱<加密 SQL Server 的連接>。

在設定資料庫安全性之後,可以使用正確的憑證將它還原。如需有關憑證的詳細資訊,請參閱<SQL Server 憑證和非對稱金鑰>。

[!附註]

當啟用 TDE 時,您應該立即備份憑證以及與此憑證有關的私密金鑰。如果此憑證無法使用或是您必須在另一部伺服器上還原或附加資料庫,您必須同時擁有此憑證和私密金鑰的備份,否則將無法開啟資料庫。即使資料庫上不再啟用 TDE,還是應該保留加密憑證或非對稱金鑰。即使資料庫並未加密,資料庫加密金鑰還是可能會保留在資料庫內,而且可能必須針對某些作業來存取。

資料庫檔案的加密會在頁面層級上執行。加密之資料庫中的頁面會先加密,然後在讀入資料庫時將其寫入磁碟及解密。TDE 並不會讓加密之資料庫的大小增加。如需有關資料庫頁面的詳細資訊,請參閱<了解頁面與範圍>。

下圖顯示 TDE 加密的架構:

在主題中顯示所描述的階層。

使用透明資料加密

若要使用 TDE,請遵循下列步驟。

  • 建立主要金鑰

  • 建立或取得受到主要金鑰保護的憑證

  • 建立資料庫加密金鑰,並使用憑證保護它

  • 設定資料庫使用加密

下列範例說明如何使用 MyServerCert 伺服器上安裝的憑證來加密和解密 AdventureWorks 資料庫。

USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>';
go
CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My DEK Certificate'
go
USE AdventureWorks
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128
ENCRYPTION BY SERVER CERTIFICATE MyServerCert
GO
ALTER DATABASE AdventureWorks
SET ENCRYPTION ON
GO

SQL Server 會將加密和解密作業排定在背景執行緒上。您可以使用本主題稍後出現之清單內的目錄檢視和動態管理檢視,以檢視這些作業的狀態。

警告注意事項警告

啟用了 TDE 的資料庫備份檔案也會使用資料庫加密金鑰來加密。因此,當您要還原這些備份時,保護資料庫加密金鑰的憑證必須可以使用。這表示,除了備份資料庫以外,您也必須確定可維護伺服器憑證的備份,以免資料遺失。如果此憑證無法再使用,就會造成資料遺失。如需詳細資訊,請參閱<SQL Server 憑證和非對稱金鑰>。

命令與函數

TDE 憑證必須由資料庫主要金鑰來加密,才能由下列陳述式所接受。如果只由密碼加密,下列陳述式將會拒絕它們當做加密程式。

重要注意事項重要事項

如果在 TDE 使用這些憑證之後,更改這些憑證使其受到密碼保護,將會造成資料庫重新啟動之後無法存取。

下表提供 TDE 命令和函數的連結與說明。

命令或函數

用途

CREATE DATABASE ENCRYPTION KEY (Transact-SQL)

建立用於加密資料庫的金鑰

ALTER DATABASE ENCRYPTION KEY (Transact-SQL)

變更用於加密資料庫的金鑰

DROP DATABASE ENCRYPTION KEY (Transact-SQL)

移除用於加密資料庫的金鑰。

ALTER DATABASE SET 選項 (Transact-SQL)

說明用來啟用 TDE 的 ALTER DATABASE 選項。

目錄檢視和動態管理檢視

下表顯示 TDE 目錄檢視和動態管理檢視。

目錄檢視或動態管理檢視

用途

sys.databases (Transact-SQL)

顯示資料庫資訊的目錄檢視。

sys.certificates (Transact-SQL)

顯示資料庫中之憑證的目錄檢視。

sys.dm_database_encryption_keys (Transact-SQL)

提供了用於資料庫之加密金鑰及資料庫之加密狀態相關資訊的動態管理檢視。

權限

TDE 的每一項功能和命令都有個別的權限需求,如同之前所示的表格所述。

檢視與 TDE 有關的中繼資料將需要憑證的 VIEW DEFINITION 權限。如需詳細資訊,請參閱<VIEW DEFINITION 權限>。

考量因素

當資料庫加密作業的重新加密掃描正在進行時,對資料庫的維護作業將會停用。您可以使用資料庫的單一使用者模式設定來執行維護作業。如需詳細資訊,請參閱<如何:將資料庫設定為單一使用者模式 (SQL Server Management Studio)>。

您可以使用 sys.dm_database_encryption_keys 動態管理檢視來尋找資料庫加密的狀態。如需詳細資訊,請參閱本主題前面的「目錄檢視和動態管理檢視」一節。

在 TDE 中,資料庫內的所有檔案和檔案群組都會加密。如果資料庫內有任何檔案群組標示為 READ ONLY,則資料庫加密作業將會失敗。

如果在資料庫鏡像或記錄傳送中使用資料庫,這兩個資料庫都會加密。記錄交易在這兩者之間傳送時將會加密。

重要注意事項重要事項

當設定資料庫進行加密時,所有新的全文檢索索引都會加密。之前建立的全文檢索索引將會在升級期間匯入,而且一旦資料載入 SQL Server 之後,這些索引將會使用 TDE。在資料行上啟用全文檢索索引會造成該資料行的資料在全文檢索索引掃描期間,以純文字格式寫入磁碟上。我們建議您不要在敏感性加密資料上建立全文檢索索引。

加密資料的壓縮比大幅低於對等的未加密資料。如果使用 TDE 來加密資料庫,則備份壓縮將無法大幅壓縮備份儲存體。因此,不建議您同時使用 TDE 與備份壓縮。

限制

在初始資料庫加密、金鑰變更或資料庫解密期間,不允許以下作業:

  • 從資料庫中的檔案群組卸除檔案

  • 卸除資料庫

  • 讓資料庫離線

  • 卸離資料庫

  • 將資料庫或檔案群組轉換成 READ ONLY 狀態

在執行 CREATE DATABASE ENCRYPTION KEY、ALTER DATABASE ENCRYPTION KEY、DROP DATABASE ENCRYPTION KEY 或 ALTER DATABASE...SET ENCRYPTION 陳述式期間,不允許下列作業。

  • 從資料庫中的檔案群組卸除檔案。

  • 卸除資料庫。

  • 讓資料庫離線。

  • 卸離資料庫。

  • 將資料庫或檔案群組轉換成 READ ONLY 狀態。

  • 使用 ALTER DATABASE 命令。

  • 啟動資料庫或資料庫檔案備份。

  • 啟動資料庫或資料庫檔案還原。

  • 建立快照集。

下列作業或條件會讓 CREATE DATABASE ENCRYPTION KEY、ALTER DATABASE ENCRYPTION KEY、DROP DATABASE ENCRYPTION KEY 或 ALTER DATABASE...SET ENCRYPTION 陳述式無法執行。

  • 資料庫是唯讀的,或是具有任何唯讀的檔案群組。

  • 正在執行 ALTER DATABASE 命令。

  • 正在執行任何資料備份。

  • 資料庫處於離線或還原狀況。

  • 快照集正在進行中。

  • 資料庫維護工作。

透明資料加密和交易記錄

讓資料庫使用 TDE 會產生讓虛擬交易記錄的其餘部分歸零的結果,以強制使用下一個虛擬交易記錄。這樣可確保在設定資料庫進行加密之後,交易記錄中不會留下任何純文字。您可以尋找記錄檔加密的狀態,其方式是檢視 sys.dm_database_encryption_keys 檢視中的 encryption_state 資料行,如以下範例所示:

USE AdventureWorks;
GO
/* The value 3 represents an encrypted state 
   on the database and transaction logs. */
SELECT *
FROM sys.dm_database_encryption_keys
WHERE encryption_state = 3;
GO

如需有關 SQL Server 記錄檔架構的詳細資訊,請參閱<交易記錄檔實體架構>。

在資料庫加密金鑰變更之前寫入交易記錄的所有資料,都會使用之前的資料庫加密金鑰進行加密。

當資料庫加密金鑰已經修改兩次之後,您就必須先執行記錄備份,然後才能再次修改資料庫加密金鑰。

透明資料加密和 tempdb 系統資料庫

如果 SQL Server 執行個體上的任何其他資料庫是使用 TDE 進行加密,則 tempdb 系統資料庫將會加密。這可能會對於相同 SQL Server 執行個體上未加密的資料庫造成效能上的影響。如需有關 tempdb 系統資料庫的詳細資訊,請參閱<tempdb 資料庫>。

透明資料加密和複寫

複寫不會自動使用加密形式來複寫啟用 TDE 之資料庫內的資料。如果您想要保護散發資料庫和訂閱者資料庫,必須個別啟用 TDE。快照式複寫及交易式複寫和合併式複寫之資料的初始散發都可以將資料儲存在未加密的中繼檔案中,例如 bcp 檔案。 在交易式複寫或合併式複寫期間,可以啟用加密來保護通訊通道。如需詳細資訊,請參閱<如何:啟用 Database Engine 的加密連接 (SQL Server 組態管理員)>。

透明資料加密和 FILESTREAM DATA

即使啟用了 TDE,FILESTREAM 資料也不會加密。