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