瞭解透明數據加密 (TDE)

您可以採取一些預防措施來幫助保護數據庫的安全,如設計一個安全系統、加密機密資產以及在數據庫服務器的周圍構建防火牆。但是,如果遇到物理介質(如驅動器或備份磁帶)被盜的情況,惡意破壞方只需還原或附加數據庫即可瀏覽數據。一種解決方案是加密數據庫中的敏感數據,並通過證書保護用於加密數據的密鑰。這可以防止任何沒有密鑰的人使用這些數據,但這種保護必須事先計劃。

“透明數據加密”(TDE) 可對數據和日誌文件執行實時 I/O 加密和解密。這種加密使用數據庫加密密鑰 (DEK),該密鑰存儲在數據庫引導記錄中以供恢復時使用。DEK 是使用存儲在服務器的 master 數據庫中的證書保護的對稱密鑰,或者是由 EKM 模塊保護的非對稱密鑰。TDE 保護“處於休眠狀態”的數據,即數據和日誌文件。它提供了遵從許多法律、法規和各個行業建立的準則的能力。軟件開發人員籍此可以使用 AES 和 3DES 加密算法來加密數據,且無需更改現有的應用程序。

重要說明 重要提示

TDE 不提供跨通信信道加密。有關如何跨通信信道加密數據的詳細信息,請參閱加密與 SQL Server 的連接

對數據庫實施保護措施後,可以通過使用正確的證書還原此數據庫。有關證書的詳細信息,請參閱 SQL Server 證書和非對稱密鑰

注意 注意

啓用 TDE 時,應該立即備份證書和與證書相關聯的私鑰。如果證書變爲不可用,或者如果必須在另一臺服務器上還原或附加數據庫,則必須同時具有證書和私鑰的備份,否則將無法打開該數據庫。即使不再對數據庫啓用 TDE,也應該保留加密證書或非對稱密鑰。即使數據庫沒有加密,數據庫加密密鑰可能也保留在數據庫中,執行某些操作時可能需要訪問這些加密密鑰。

數據庫文件的加密在頁級執行。已加密數據庫中的頁在寫入磁盤之前會進行加密,在讀入內存時會進行解密。TDE 不會增加已加密數據庫的大小。有關數據庫頁的詳細信息,請參閱頁和區

下圖顯示了 TDE 加密體系結構:

Displays the hierarchy described in the topic.

若要使用 TDE,請按以下步驟操作。

  • 創建主密鑰

  • 創建或獲取由主密鑰保護的證書

  • 創建數據庫加密密鑰並通過此證書保護該密鑰

  • 將數據庫設置爲使用加密

下面的示例演示如何使用安裝在名爲 MyServerCert 的服務器上的證書加密和解密 AdventureWorks2008R2 數據庫。

USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>';
go
CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My DEK Certificate';
go
USE AdventureWorks2008R2;
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
GO
ALTER DATABASE AdventureWorks2008R2
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,則即時文件初始化功能不可用。

透明數據加密與事務日誌

允許數據庫使用 TDE 具有將虛擬事務日誌的剩餘部分“清零”以強制加密下一個虛擬事務日誌的效果。這可以保證在數據庫設置爲加密後事務日誌中不會留有明文。可通過查看 sys.dm_database_encryption_keys 視圖中的 encryption_state 列來確定日誌文件加密狀態,如以下示例所示:

USE AdventureWorks2008R2;
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 文件)中存儲數據。 在事務或合併複製期間,可以啓用加密來保護通信信道。有關詳細信息,請參閱如何啓用數據庫引擎的加密連接(SQL Server 配置管理器)

透明數據加密和 FILESTREAM 數據

即使啓用了 TDE,也不會加密 FILESTREAM 數據。

WebCast: https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=zh-CN&EventID=1032401940&CountryCode=CN

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章