如何實現存儲層數據加密,不妨試試透明加密(TDE)
數據庫透明加密(Transparent Data Encryption,簡稱TDE)是一種用于加密數據庫存儲的數據的技術,它可以在數據庫系統的文件或磁盤層面對數據進行加密,而不需要修改應用程序代碼。TDE 主要用于保護數據靜態時的安全,即數據在硬盤上或備份介質中時的安全。
特點:
- 透明性:用戶和應用程序無需更改就可以使用加密功能,因為加密和解密操作是自動進行的,由數據庫管理系統來實現。
- 綜合管理:加密密鑰的生命周期(創建、分配、旋轉和銷毀)通常由數據庫管理系統或專用的密鑰管理基礎設施來處理。
- 性能影響最小化:TDE 旨在盡量減少對數據庫性能的影響,因此通常只加密敏感的數據(如表中的特定列)或整個數據庫文件。
工作原理:
- 密鑰生成:生成一個或多個加密密鑰用于加密數據。這些密鑰可能包括數據庫加密密鑰(DEK)和主加密密鑰(MEK)。
- 數據加密:當數據寫入到磁盤時,數據庫通過DEK進行加密;當數據讀取時,再進行解密。
- 密鑰管理:MEK用于保護DEK,并且通常存儲在受保護的密鑰庫中。MEK需要高度安全的存儲和管理。
- 訪問控制:通常還會結合其他數據庫安全技術,如角色基礎的訪問控制,來確保只有授權用戶才能訪問加密數據。
應用場景:
- 數據保護:防止未經授權的訪問者直接從物理介質上讀取數據。
- 符合法規:滿足數據保護法規的要求,比如GDPR、PCI DSS等,這些法規要求對敏感數據進行加密。
- 數據隱私:保護用戶的隱私信息,防止數據泄露給非授權人員。
支持TDE的數據庫:
- Oracle Database
- Microsoft SQL Server
- IBM DB2
- MySQL Enterprise Edition
- PostgreSQL (通過第三方擴展支持)
- OceanBase 等
OceanBase透明加密舉例
數據存儲加密是指對數據和 Clog 等保存在磁盤中的數據進行無感知的加密,即透明加密(簡稱 TDE)。數據在寫入存儲設備前自動進行加密,讀取時自動解密,該過程對用戶是透明的,黑客和惡意用戶無法從數據文件、數據庫備份或磁盤中讀取到敏感數據。
兩級密鑰體系
透明數據加密使用兩級密鑰體系實現加解密功能。開啟加密的最小粒度為數據庫中的一個表,需要開啟加密的表需要放到一個加密的表空間(Tablespace)中。OceanBase 數據庫數據的加密單位為表空間,表空間僅是為了兼容 Oracle 數據庫而設計的概念,可以簡單理解為表空間是一組表的集合。每個加密的表空間設置有加密算法及對應的數據密鑰,用于給表空間中的數據進行加密。每個租戶有一個主密鑰,用于對表空間的數據密鑰進行加密,為了防止未經授權的解密操作,通常將主密鑰存儲于專門的 Keystore 中。(此段內容引用自OceanBase官方文檔)
缺點
啟用透明數據加密(TDE)的列在進行模糊查詢時,會出現性能下降。這是因為加密操作增加了處理數據時的計算負擔,并且會影響到數據庫管理系統執行查詢的方式。以下是幾個性能下降的原因:
- 加解密開銷:每當數據從存儲介質讀取或寫入時,都需要進行加解密操作,這本身就需要額外的CPU資源。
- 索引效率降低:在一些情況下,特別是對于加密的列數據建立索引時,索引的效率可能會受到影響,因為編制索引的是加密后的值而不是原始值。這意味著某些索引優化策略可能無法應用,從而導致查詢性能下降。
- 模糊查詢限制:像 LIKE 這樣的模糊查詢操作通常依賴于對數據的模式匹配。如果數據是加密的,數據庫系統通常無法在未解密的數據上直接應用模式匹配。這就要求系統解密數據集中的每一行來進行比較,進一步增加了查詢時間。
- 內存和IO壓力:大量的加解密操作可能會增加內存和IO的壓力,尤其是在處理大量數據時。
- 并發性能影響:高并發環境下,多個查詢同時進行加解密可能會導致資源競爭,降低整體數據庫的性能。
總結
透明加密目前是比較成熟的數據存儲加密方案,但在模糊查詢的場景下,性能會出現比較大的性能損耗,在使用時需要注意只加密敏感信息,并減少敏感信息的模糊查詢。