原文地址:https://severalnines.com/database-blog/enabling-transparent-data-encryption-for-sql-server
原文作者:Rajendra Gupta
近年來,數據加密作為保護組織機構內數據的最有效方法之一而廣受歡迎。數據加密的工作原理是將數據轉換為不可讀的格式(稱為密文),從而保護數據。將數據轉換為密文的過程就是所謂的加密。
這個術語“加密”本身非常廣泛。其中一種方法是對數據庫中的敏感數據進行加密,并使用證書來保護密鑰。這種方法可確保沒有密鑰的人無法訪問數據庫。但是這種保護方式必須提前計劃才有效。
透明數據加密 (TDE)也稱為加密靜態數據,是一個當數據處于靜態時,保護或加密數據的過程。這是一個可以加密數據文件和日志文件的功能強大的工具。此加密技術需要用到證書。證書專用于保護DEK或數據庫加密密鑰,此密鑰是作為私鑰,用來解密已經加密的信息。
此框架為數據、日志和備份文件提供加密,這在許多場景下至關重要,特別是對于力求遵守和存儲敏感客戶數據相關的各種法律法規的軟件工程師來說。TDE允許軟件開發人員通過完全加密數據來提供端到端加密,而無需更改其現有代碼以遵守特定行業中存在的許多規則。
注:以下SQLServer Linux版本支持TDE:標準版、企業版和開發人員版。
Linux上SQLServer的透明數據加密
數據庫的加密要求在將數據庫頁寫入磁盤之前對其進行加密。同樣,數據庫頁應解密到內存中。TDE不會因加密或解密的引入而增加任何內存大小,也不會顯著影響讀取或寫入已加密數據庫的訪問速度(3-5%開銷)。下圖展示了數據庫中透明數據加密的架構(TDE)。數據庫級項目(如數據庫加密密鑰、ALTER DATABASE語句和某些內部系統程序)是用戶可配置級別的。

圖片來源點這里:微軟文檔
Linux上為SQLServer配置TDE的步驟
如下腳本會執行相應的任務:
1. 創建主密鑰
首先,我們在Master數據庫中創建主密鑰。接下來我們將使用“USE MASTER”命令來實現,因為我們無法把密鑰添加到用戶數據庫。
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>';
2. 創建受主密鑰保護的證書
一旦我們創建并記住強口令或將其保存在安全位置,就可以繼續創建實際的證書,以便我們用它連接到服務器。
CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My DEK Certificate';
go
3. 創建數據庫加密密鑰
-
接下來,我們會用“USE”命令切換到想要加密的數據庫。在執行此命令以后,會在我們已經創建的證書和其指定的數據庫之間建立相應的連接或關聯。
-
在此步驟之后,我們必須指出打算用于所選數據庫的加密算法的類型;這種情況下,它是AES_256加密。同樣,在大多數場景下,也推薦使用AES_256。
USE AdventureWorks2012;
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
GO
4.啟用加密
當我們準備好所有加密選項后,只需要用“ALTER DATABASE”命令將這些選項應用到數據庫即可。
ALTER DATABASE AdventureWorks2012
SET ENCRYPTION ON;
GO
在數據庫上啟用透明數據加密(TDE)前,SQLServer必須執行一次加密掃描。此次掃描會將數據文件中的每個頁面讀取到緩沖池中,然后再把已經加密的頁面寫回到磁盤里。
SQLServer 2019(15.x)引入了一項名為TDE暫停和恢復的新功能。此功能允許我們在需要時恢復或暫停掃描。如果掃描被掛起,也允許數據庫繼續運行且不會降低速度。
- 暫停TDE加密掃描的腳本:
ALTER DATABASE <db_name> SET ENCRYPTION SUSPEND;
- 恢復TDE加密掃描的腳本:
ALTER DATABASE <db_name> SET ENCRYPTION RESUME;
TDE和Tempdb系統數據庫
如果SQLServer實例上的任何其他數據庫已用TDE加密,那么tempdb數據庫也會被加密。加密操作可能會對那些未加密的數據庫造成一定的性能影響。
注: 在TDE中,數據庫中的所有文件和文件組都是加密的。如果某個數據庫中的任何文件組被標記為只讀,則此數據庫加密操作失敗。
備份證書
將已創建證書的副本保存在安全位置是至關重要的。如果服務器宕機,備份站點需要在為客戶提供服務之前,先導入此證書。假設DR服務器已啟動并處于熱備份狀態。在這種情況下,我們建議提前自動導入已保存的證書,這樣做的好處是,如果硬件出現了什么問題,也能順利運行,不會因此中斷。
以下腳本會將證書及其私鑰備份在C:\Temp目錄上。
BACKUP CERTIFICATE MyServerCert
TO FILE = 'C:\temp\MyServerCert'
WITH PRIVATE KEY (file='C:\temp\MyServerCert.pvk',
ENCRYPTION BY PASSWORD='StrongPassword')
刪除TDE
從數據庫中刪除透明數據加密,請使用以下SQL腳本。
ALTER DATABASE <db_name> SET ENCRYPTION OFF;
結束語
透明數據加密(TDE)是SQLServer一項強大的功能,它允許您加密數據文件和事務日志,以防止物理盜竊或未經授權的訪問。尤其是在當今形勢下,此功能對于遵守法律法規以及保護組織免受網絡間諜活動至關重要。您是否知道ClusterControl現在支持SQLServer?立即開始 30天免費試用并下載ClusterControl,一起來親身體驗功能強大的數據庫自動化平臺吧。




