共用方式為


透明資料加密 (TDE)

透明數據加密 (TDE) 會加密 SQL Server 和 Azure SQL Database 數據檔,稱為加密待用數據。 您可以採取數個預防措施來協助保護資料庫,例如設計安全系統、加密機密資產,以及在資料庫伺服器周圍建置防火牆。 不過,在實體媒體(例如磁碟驅動器或備份磁帶)遭竊的案例中,惡意方只能還原或附加資料庫並瀏覽數據。 其中一個解決方案是加密資料庫中的敏感數據,並保護用來使用憑證加密數據的密鑰。 這可防止沒有密鑰的任何人使用數據,但必須事先規劃這種保護。

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

這很重要

TDE 不會在通信通道上提供加密。 如需如何跨通道加密數據的詳細資訊,請參閱啟用 Database Engine 的加密連線(SQL Server 組態管理員)。

相關主題:

關於 TDE

資料庫檔案的加密會在頁面層級執行。 加密資料庫中的頁面會在寫入磁碟之前加密,並在讀取記憶體時解密。 TDE 不會增加加密資料庫的大小。

適用於 SQL Database 的資訊

搭配 SQL Database V12 V12 使用 TDE 時,(某些地區為預覽模式)SQL Database 會自動為您建立儲存在 master 資料庫中的伺服器層級憑證。 若要在 SQL Database 上移動 TDE 資料庫,您必須解密資料庫、移動資料庫,然後在目的地 SQL Database 上重新啟用 TDE。 如需 SQL Database 上 TDE 的逐步指示,請參閱 使用 Azure SQL Database 進行透明數據加密

即使在 SQL Database 版本系列 V12 宣告為正式運作狀態的地理區域部分,TDE 狀態的預覽仍然適用。 除非Microsoft宣佈 TDE 從預覽升級至 GA,否則 TDE for SQL Database 不適用於生產資料庫。 如需 SQL Database V12 的詳細資訊,請參閱 Azure SQL Database 的新功能

適用於 SQL Server 的資訊

保護資料庫之後,可以使用正確的憑證來還原資料庫。 如需有關憑證的詳細資訊,請參閱< SQL Server Certificates and Asymmetric Keys>。

啟用 TDE 時,您應該立即備份憑證和與憑證相關聯的私鑰。 如果此憑證無法使用或是您必須在另一部伺服器上還原或附加資料庫,您必須同時擁有此憑證和私密金鑰的備份,否則將無法開啟資料庫。 即使資料庫上不再啟用 TDE,也應該保留加密憑證。 即使資料庫未加密,事務歷史記錄的某些部分仍可能會保持保護,而且某些作業可能需要憑證,直到執行資料庫的完整備份為止。 超過到期日的憑證仍可用來使用 TDE 加密和解密數據。

加密階層

下圖顯示 TDE 加密的架構。 只有資料庫層級的專案(例如資料庫加密密鑰和 ALTER DATABASE 部分)在使用 SQL Database 的 TDE 時是由用戶可自訂的。

顯示主題中所述的階層。

使用透明數據加密

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

適用於:SQL Server。
  • 建立主要金鑰

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

  • 建立資料庫加密金鑰,並透過憑證加以保護

  • 將資料庫設定為使用加密

下列範例說明使用安裝在 伺服器上之MyServerCert憑證來加密和解密AdventureWorks2012資料庫。

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

SQL Server 會在背景線程上排程加密和解密作業。 您可以在本主題稍後出現的清單中,使用目錄檢視和動態管理檢視來檢視這些作業的狀態。

謹慎

已啟用 TDE 的資料庫備份檔也會使用資料庫加密金鑰來加密。 因此,當您還原這些備份時,必須提供保護資料庫加密密鑰的憑證。 這表示除了備份資料庫之外,您必須確定您維護伺服器證書的備份,以防止數據遺失。 如果憑證已無法使用,將會發生資料遺失。 如需詳細資訊,請參閱 SQL Server Certificates and Asymmetric Keys

指令和功能

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) 說明 ALTER DATABASE 用來啟用 TDE 的選項。

目錄檢視和動態管理檢視

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

目錄檢視或動態管理檢視 目標
sys.databases (Transact-SQL) 顯示資料庫資訊的目錄檢視。
sys.certificates (Transact-SQL) 顯示資料庫中憑證的目錄檢視。
sys.dm_database_encryption_keys (Transact-SQL) 動態管理檢視,提供資料庫中所使用的加密密鑰相關信息,以及資料庫加密的狀態。

權限

每個 TDE 功能和命令都有個別的許可權需求,如稍早所示的數據表所述。

檢視與 TDE 相關的元數據需要憑證的 VIEW DEFINITION 許可權。

考慮事項

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

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

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

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

這很重要

當資料庫設定為加密時,任何新的全文檢索索引都會加密。 先前建立的全文檢索索引會在升級期間匯入,而且數據載入 SQL Server 之後將會在 TDE 中。 在數據行上啟用全文檢索索引,可能會導致該數據行的數據在全文檢索索引掃描期間以純文本寫入磁碟。 建議您不要在機密加密數據上建立全文檢索索引。

加密的數據壓縮明顯小於對等的未加密數據。 如果使用 TDE 來加密資料庫,備份壓縮將無法大幅壓縮備份記憶體。 因此,不建議同時使用 TDE 和備份壓縮。

限制

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

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

  • 卸除資料庫

  • 讓資料庫離線

  • 卸離資料庫

  • 將資料庫或檔案群組轉換成只讀狀態

以下操作在 CREATE DATABASE ENCRYPTION KEY、ALTER DATABASE ENCRYPTION KEY、DROP DATABASE ENCRYPTION KEY 或 ALTER DATABASE...SET ENCRYPTION 語句中是不被允許的。

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

  • 卸除資料庫。

  • 讓資料庫離線。

  • 卸離資料庫。

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

  • 使用 ALTER DATABASE 命令。

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

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

  • 建立快照。

下列作業或條件會防止 CREATE DATABASE ENCRYPTION KEY、ALTER DATABASE ENCRYPTION KEY、DROP DATABASE ENCRYPTION KEY 或 ALTER DATABASE...SET ENCRYPTION 語句。

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

  • ALTER DATABASE 命令正在執行。

  • 任何數據備份正在執行中。

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

  • 快照正在進行中。

  • 資料庫維護工作。

建立資料庫檔案時,啟用 TDE 時無法使用立即檔案初始化。

若要使用非對稱金鑰加密資料庫加密金鑰,非對稱金鑰必須位於可延伸金鑰管理提供者上。

透明數據加密和事務歷史記錄

讓資料庫能夠使用 TDE 會影響虛擬事務歷史記錄的其餘部分「零除」,以強制下一個虛擬事務歷史記錄。 這可確保在資料庫設定加密之後,事務歷史記錄中不會留下任何純文本。 您可以透過在sys.dm_database_encryption_keys檢視中查看encryption_state欄位,以了解記錄檔加密的狀態,如以下範例所示。

USE AdventureWorks2012;
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 記錄檔架構的詳細資訊,請參閱 事務歷史記錄檔 (SQL Server)

在資料庫加密金鑰變更之前寫入事務歷史記錄的所有數據,都會使用先前的資料庫加密金鑰來加密。

在資料庫加密金鑰兩次修改之後,必須先執行記錄備份,才能再次修改資料庫加密密鑰。

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

當 SQL Server 實例上的任何其他資料庫使用 TDE 加密時,tempdb 系統資料庫也會被加密。 這可能會對相同 SQL Server 實例上的未加密資料庫產生效能影響。 如需tempdb系統資料庫的詳細資訊,請參閱 tempdb資料庫

透明數據加密和復寫

複寫不會以加密形式自動從已啟用 TDE 的資料庫複寫數據。 如果您想要保護散發和訂閱者資料庫,則必須個別啟用 TDE。 快照複寫,以及交易和合併複寫的數據初始分發,可能會將數據儲存在未加密的中繼檔案中,例如 bcp 檔案。 在交易式或合併式復寫期間,可以啟用加密來保護通道。 如需詳細資訊,請參閱啟用資料庫引擎的加密連線 (SQL Server 組態管理員)

透明資料加密和 FILESTREAM 資料

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

透明數據加密和緩衝池延伸模組

使用 TDE 加密資料庫時,不會加密與緩衝池擴充功能相關的檔案(BPE)。 您必須針對 BPE 相關檔案使用 Bitlocker 或 EFS 等文件系統層級加密工具。

透明數據加密和 In-Memory OLTP

您可以在具有 In-Memory OLTP 物件的資料庫上啟用 TDE。 如果啟用 TDE,In-Memory OLTP 記錄檔記錄會加密。 如果啟用 TDE,則不會加密MEMORY_OPTIMIZED_DATA檔案群組中的數據。

另請參閱

將受 TDE 保護的資料庫移至另一個 SQL Server使用 EKM 啟用 TDE透明數據加密搭配 Azure SQL DatabaseSQL Server 加密SQL Server 和資料庫加密密鑰(Database Engine)SQL Server 資料庫引擎及 Azure SQL Database 的安全中心FILESTREAM (SQL Server)