SQL Server 數據加密功能解析 轉載自: 騰雲閣 https://www.qcloud.com/community/article/194 數據加密是資料庫被破解、物理介質被盜、備份被竊取的最後一道防線,數據加密,一方面解決數據被竊取安全問題,另一方面有關法律要求強制加密數據。SQL Ser ...
SQL Server 數據加密功能解析
轉載自: 騰雲閣 https://www.qcloud.com/community/article/194
數據加密是資料庫被破解、物理介質被盜、備份被竊取的最後一道防線,數據加密,一方面解決數據被竊取安全問題,另一方面有關法律要求強制加密數據。SQL Server 的數據加密相較於其他資料庫,功能相對完善,加密方法較多。通常來講,數據加密分為對稱加密和非對稱加密。對稱加密:加密與解密使用同一密鑰,密鑰需要傳輸,安全性較弱,但性能較非對稱要好。非對稱加密:加密與解密使用不同密鑰(公鑰和私鑰),較對稱密鑰安全性較好,但是演算法較複雜,帶來性能上的損失。因此,折中的方法是使用對稱密鑰加密數據,使用非對稱密鑰加密對稱密鑰。這樣既保證高性能,又提高密鑰的可靠性。
同樣,SQL Server 就使用了折中的方法,所以SQL Server 加密功能包含2個部分:數據加密和密鑰管理
一.數據加密
說道數據加密,我們不得不說下加密演算法,SQL Server支持多種加密演算法:
二.密鑰管理
1.SQL Server加密層次結構
由圖可以看出,加密是分層級的。每一個資料庫實例都擁有一個服務主密鑰(Service Master Key),這個密鑰是實例的根密鑰,在實例安裝的時候自動生成,其本身由Windows提供的數據保護API進行保護(Data Pertection API),服務主密鑰除了為其子節點提供加密服務之外,還用於加密一些實例級別的信息,比如實例的登錄名密碼或者鏈接伺服器的信息。
在服務主密鑰之下的是資料庫主密鑰(Database Master Key),這個密鑰由服務主密鑰進行加密。這是一個資料庫級別的密鑰,可以用於為創建資料庫級別的證書或非對稱密鑰提供加密,每一個資料庫只能有一個資料庫主密鑰。
EKM模塊,這個比較特別,全稱可擴展密鑰管理模塊,該功能增強sqlserver密鑰管理的能力,允許將密鑰存儲到資料庫之外,包括一些硬體,如智能卡、USB設備或硬體安全模塊(HSM);並且允許使用第三方產品來管理密鑰和進行加密;另外,有條件的可以使用更高性能的HSM模塊來加解密,減少加解密上性能的損失。
2.SQL Server加密方式
對象定義加密
未保證觸發器、存儲過程、視圖等定義信息,我們可以在定義sqlserver對象的時候添加WITH ENCRYPTION欄位來加密對象。
列數據加密
通過函數加密表中的某一列數據。可以通過密碼、對稱密鑰、非對稱密鑰、證書等4中方式加密。其中,還包括 帶有驗證器的加密函數,驗證器用來解決密文替換問題,驗證器一般選用不更改獨一無二的id,這樣就算密文替換,驗證器不對,一樣失敗。
連接加密
通過證書的方式對ssl連接加密,一般用於鏡像,客戶端和SQL Server之間的連接就是通過這種方式,防止黑客竊取客戶端和資料庫之間的發送的數據。
TDE透明數據加密(2008)
透明數據加密,顧名思義,是在用戶不感知的情況下完成加解密操作。
它的加密是在頁級別進行,是在寫入磁碟前加密,讀入記憶體時解密,針對數據和日誌文件,做到實時I/O加密,並且備份文件也會一同加密。
密鑰存在資料庫引導記錄中,收到證書或者非對稱密鑰的保護,也可以與EKM模塊一同使用。官方說法,額外占用3%-5%的cpu資源。
TDE也有一些缺點:
壓縮率小,由於它是先加密再壓縮的,所以無法顯著壓縮備份。
備份同樣是加密的,所有恢復的時候要小心,註意備份證書和密鑰,才能在另個實例中還原資料庫
性能有一定損耗
備份加密(2014)
支持備份的過程中進行加密,並且支持先壓縮在加密,保持高壓縮比,打破了使用透明數據加密後幾乎沒有壓縮率的窘境。
因此,使用原生備份加密無論在將數據備份到異地數據中心,還是將數據備份到雲端,都能夠以非常低的成本對數據提供額外的安全保障。
全程加密AlwaysEncrypted(2016)
全程加密,數據永遠是加密狀態,你可以在加密數據上執行操作,無需先對它們解密,也就是說加密的敏感信息不會有機會變為明文。
全程加密針對列做處理,在創建列主密鑰,列加密密鑰後,可以在創建表的時候設置列加密。
加密模式分為兩種:確定型加密與隨機型加密。
確定型加密能夠確保對某個值加密後的結果是始終相同的,這就允許使用者對該數據列進行等值比較、連接及分組操作。確定型加密的缺點在於有可能揣測出原文,而隨機型加密能夠保證某個給定值在任意兩次加密後的結果總是不同的,從而杜絕了猜出原值的可能性。官方建議需要搜索和分組的列使用確定性加密,而註釋和其他敏感不會進行搜索分組的信息使用隨機性加密。