透明資料加密 (TDE)
適用于:SQL Server
Azure SQL資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics Analytics
Platform System (PDW)
透明資料加密 (TDE) 會加密 SQL Server、Azure SQL Database 和 Azure Synapse Analytics 資料檔案。 此加密稱為加密待用資料。
若要協助保護使用者資料庫,您可以採取如下的預防措施:
- 設計安全的系統。
- 加密機密資產。
- 在資料庫伺服器周圍建置防火牆。
不過,竊取磁片磁碟機或備份磁帶等實體媒體的惡意物件可以還原或附加資料庫並流覽其資料。
解決方案之一是加密資料庫中的敏感性資料,並使用憑證來保護加密資料的金鑰。 這個解決方案可防止沒有金鑰的人使用該資料。 但這種防護必須事先規劃。
TDE 會執行資料和記錄檔的即時 I/O 加密和解密。 加密使用資料庫加密金鑰 (DEK)。 資料庫開機記錄會儲存金鑰以供復原時使用。 DEK 是對稱金鑰。 其受到伺服器資料庫所儲存的 master
憑證或 EKM 模組所保護的非對稱金鑰所保護。
TDE 會保護待用資料,亦即資料檔和記錄檔。 這讓您必須遵循不同行業建立的許多法令、規章和指導方針。 此功能可讓軟體開發人員使用 AES 和 3DES 加密演算法來加密資料,而無需變更現有的應用程式。
注意
TDE 不適用於系統資料庫。 它無法用來加密主要、模型或 msdb
。 tempdb
當啟用 TDE 的使用者資料庫時,會自動加密,但無法直接加密。
關於 TDE
資料庫檔案的加密會在頁面層級執行。 加密資料庫中的頁面會在寫入磁碟前即已加密,並在讀入記憶體時解密。 TDE 不會增加加密資料庫的大小。
適用于SQL Database的資訊
當您搭配 Azure SQL Database 使用 TDE 時,SQL Database會自動建立儲存在 master
資料庫中的伺服器層級證書。 若要在SQL Database上移動 TDE 資料庫,您不需要解密移動作業的資料庫。 如需搭配使用 TDE 搭配SQL Database的詳細資訊,請參閱使用 Azure SQL Database 進行透明資料加密。
適用于SQL Server的資訊
保護資料庫之後,即可使用正確的憑證來還原資料庫。 如需有關憑證的詳細資訊,請參閱< SQL Server Certificates and Asymmetric Keys>。
啟用 TDE 之後,請立即備份憑證及其相關聯的私密金鑰。 如果憑證無法使用,或您在另一部伺服器上還原或附加資料庫,則需要使用備份的憑證和私密金鑰。 否則,即無法開啟資料庫。
即使資料庫已停用 TDE,仍請保留加密憑證。 雖然資料庫未加密,但部分交易記錄檔可能仍受到保護。 在執行完整資料庫備份之前,執行某些作業可能也需要憑證。
已超過到期日的憑證仍可與 TDE 搭配用來加密和解密資料。
加密階層
Windows 資料保護 API (DPAPI) 位於加密樹狀結構的根目錄、保護機器層級的金鑰階層,並用來保護資料庫伺服器實例的服務主要金鑰 (SMK) 。 SMK 會保護資料庫主要金鑰 (DMK) ,此金鑰會儲存在使用者資料庫層級,並保護憑證和非對稱金鑰。 接著,這些金鑰會保護對稱金鑰,以保護資料。 TDE 會使用類似憑證的階層。 當您使用 TDE 時,DMK 和憑證必須儲存在 master
資料庫中。 只會用於 TDE 的新金鑰,稱為 DEK (DEK) 的資料庫加密金鑰,會建立並儲存在使用者資料庫中。
下圖顯示 TDE 加密的架構。 當您在 SQL Database 上使用 TDE 時,只有資料庫層級專案 (資料庫加密金鑰和 ALTER 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_256
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) | 說明啟用 TDE 所用的 ALTER DATABASE 選項 |
目錄檢視和動態管理檢視
下表顯示 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 中,資料庫內的所有檔案和檔案群組都會加密。 如果資料庫中有任何檔案群組標示為 READ ONLY,則資料庫加密作業將會失敗。
如果在資料庫鏡像或記錄傳送中使用資料庫,則兩個資料庫都會加密。 在兩者之間傳送記錄交易時會予以加密。
重要
設定資料庫加密時,即會加密全文檢索索引。 在 SQL Server 2008 前的 SQL Server 版本中建立的這類索引會由 SQL Server 2008 或更新版本匯入資料庫,並由 TDE 加密。
提示
若要監視資料庫的 TDE 狀態變更,請使用 SQL Server Audit 或 SQL Database 稽核。 SQL Server 將 TDE 追蹤記錄放在稽核動作群組 DATABASE_CHANGE_GROUP 下,此群組位於 動作群組和動作中。
限制
在初始資料庫加密、金鑰變更或資料庫解密期間,不允許下列作業:
從資料庫的檔案群組中卸除檔案
卸除資料庫
讓資料庫離線
卸離資料庫
將資料庫或檔案群組轉換成 READ ONLY 狀態
在 、 ALTER DATABASE ENCRYPTION KEY
DROP DATABASE ENCRYPTION KEY
、 和 ALTER DATABASE...SET ENCRYPTION
語句期間 CREATE DATABASE ENCRYPTION KEY
不允許下列作業:
從資料庫的檔案群組中卸除檔案
卸除資料庫
讓資料庫離線
卸離資料庫
將資料庫或檔案群組轉換成 READ ONLY 狀態
使用 ALTER DATABASE 命令
啟動資料庫或資料庫檔案備份
啟動資料庫或資料庫檔案還原
建立快照集
下列作業或條件會防止 CREATE DATABASE ENCRYPTION KEY
、 ALTER DATABASE ENCRYPTION KEY
、 DROP DATABASE ENCRYPTION KEY
和 ALTER DATABASE...SET ENCRYPTION
語句:
資料庫是唯讀的,或具有唯讀的檔案群組。
正在執行 ALTER DATABASE 命令。
正在執行資料備份。
資料庫為離線或還原狀態。
快照集正在進行中。
正在執行資料庫維護工作。
建立資料庫檔案時,如果啟用 TDE 即無法使用立即檔案初始化功能。
為了使用非對稱金鑰來加密資料庫加密金鑰,此非對稱金鑰必須位在可延伸的金鑰管理提供者上。
TDE 掃描
若要在資料庫上啟用 TDE,SQL Server必須執行加密掃描。 掃描會將資料檔案的每一頁都讀入緩衝集區,然後將加密的頁面寫回磁片。
為了讓您更充分掌控加密掃描,SQL Server 2019 (15.x) 引進了具有暫停和繼續語法的 TDE 掃描。 您可在系統工作負載過重或業務忙碌時段暫停掃描,再於稍後時間繼續掃描。
使用下列語法可暫停 TDE 加密掃描:
ALTER DATABASE <db_name> SET ENCRYPTION SUSPEND;
您也可以使用下列語法繼續 TDE 加密掃描:
ALTER DATABASE <db_name> SET ENCRYPTION RESUME;
encryption_scan_state資料行已新增至 sys.dm_database_encryption_keys
動態管理檢視。 其顯示加密掃描目前的狀態。 另有稱為 encryption_scan_modify_date 的新資料行,其包含上次加密掃描狀態變更的日期和時間。
如果SQL Server實例在加密掃描暫停時重新開機,則會在啟動期間將訊息記錄在錯誤記錄檔中。 該訊息會指出現有的掃描已暫停。
重要
Azure SQL Database、Azure SQL 受控執行個體 和 Azure Synapse Analytics 目前無法使用暫停和繼續 TDE 掃描功能。
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) 。
在資料庫加密金鑰變更前,所有寫入交易記錄的資料都是使用前一個資料庫加密金鑰來加密。
如要變更兩次資料庫加密金鑰,則必須先執行記錄備份,才能再次變更資料庫加密金鑰。
TDE 和 tempdb
系統資料庫
tempdb
如果使用 TDE 加密SQL Server實例上的任何其他資料庫,系統資料庫就會加密。 這加密可能會影響相同 SQL Server 執行個體上未加密的資料庫效能。 如需系統資料庫的詳細資訊 tempdb
,請參閱 tempdb 資料庫。
TDE 和複寫
複寫不會自動以加密形式複寫啟用 TDE 的資料庫資料。 如果想要保護散發資料庫和訂閱者資料庫,請分別啟用 TDE。
快照式複寫可將資料儲存在未加密的中繼檔案中,例如 BCP 檔案。 異動複寫和合併式複寫的初始資料散發亦可。 在這類複寫期間,您可啟用加密來保護通訊通道。
如需詳細資訊,請參閱啟用資料庫引擎的加密連線 (SQL Server 組態管理員)。
TDE 和可用性群組
您可以將 加密的資料庫新增至可用性群組。
若要加密屬於可用性群組的資料庫,請先在所有次要複本上建立主要金鑰和憑證或非對稱金鑰 (EKM),再於主要複本上建立資料庫加密金鑰。
如果使用憑證保護資料庫加密金鑰 (DEK),請備份在主要複本上建立的憑證,然後先在所有次要複本上使用檔案建立憑證,再於主要複本上建立資料庫加密金鑰。
TDE 和 FILESTREAM 資料
即使啟用 TDE 也不會加密 FILESTREAM 資料。
TDE 和備份
憑證通常用於透明資料加密,以保護資料庫加密金鑰 (DEK) 。 憑證必須在資料庫中建立 master
。 啟用了 TDE 的資料庫備份檔案也會使用資料庫加密金鑰來加密。 因此,當您從這些備份還原時,必須提供保護資料庫加密金鑰的憑證。 這表示除了備份資料庫之外,您還必須維護伺服器憑證的備份,以避免資料遺失。 如果此憑證無法再使用,就會造成資料遺失。
移除 TDE
使用 ALTER DATABASE
陳述式移除資料庫的加密。
ALTER DATABASE <db_name> SET ENCRYPTION OFF;
若要檢視資料庫的狀態,請使用 sys.dm_database_encryption_keys 動態管理檢視。
等候解密完成,然後使用 DROP DATABASE ENCRYPTION KEY 來移除資料庫加密金鑰。
重要
將用於 TDE 的主要金鑰和憑證備份至安全位置。 需有主要金鑰和憑證才能還原以 TDE 加密資料庫時所取得的備份。 移除資料庫加密金鑰之後,請先進行記錄備份,再建立已解密資料庫的全新完整備份。
TDE 和緩衝集區延伸模組
使用 TDE 加密資料庫時,不會加密與緩衝集區延伸模組 (BPE) 相關的檔案。 針對這些檔案,請在檔案系統層級使用 Bitlocker 或 EFS 等加密工具。
TDE 和記憶體內部 OLTP
您可對具有記憶體中 OLTP 物件的資料庫啟用 TDE。 在 SQL Server 2016 (13.x) 和 Azure SQL Database 中,如果啟用 TDE,In-Memory OLTP 記錄檔記錄和資料都會加密。 在 SQL Server 2014 (12.x) 中,如果您啟用 TDE,則會加密In-Memory OLTP 記錄檔記錄,但未加密MEMORY_OPTIMIZED_DATA檔案群組中的檔案。
管理 TDE 中使用的憑證指導方針
啟用 TDE 的資料庫並用於記錄傳送或資料庫鏡像時,需要憑證和資料庫主要金鑰的備份。
也請務必記住,用來保護資料庫加密金鑰的憑證不應該從 master
資料庫卸載。 這樣做會導致加密的資料庫變得無法存取。
如果命令中使用的憑證尚未備份,就會引發 Create Database Encryption Key
類似下列的警告訊息。
用於加密資料庫加密金鑰的憑證尚未備份。 您應該立即備份此憑證和與此憑證關聯的私密金鑰。 如果憑證變得無法使用,或者您必須還原或附加另一部伺服器上的資料庫,則必須同時備份憑證和私密金鑰,或者您將無法開啟資料庫。
下列查詢可用來識別 TDE 中使用的憑證,該憑證在建立後尚未備份。
SELECT pvt_key_last_backup_date,
Db_name(dek.database_id) AS encrypteddatabase ,c.name AS Certificate_Name
FROM sys.certificates c
INNER JOIN sys.dm_database_encryption_keys dek
ON c.thumbprint = dek.encryptor_thumbprint
如果資料行 pvt_key_last_backup_date
為 Null,則對應至該資料列的資料庫已啟用 TDE,但用來保護其 DEK 的憑證尚未備份。 如需備份憑證的詳細資訊,請參閱《線上叢書》中的 SQL Server BACKUP CERTIFICATE。