詳解SQL Server加密功能:數據加密和密鑰管理
概述
今天主要介紹SQL Server加密功能,比較特殊,跟其他數據庫的設計還是有些不太一樣的。下面一起來看看吧~
SQL Server 加密功能
數據加密是數據庫被破解、物理介質被盜、備份被竊取的最后一道防線,數據加密,一方面解決數據被竊取安全問題,另一方面有關法律要求強制加密數據。SQL Server 的數據加密相較于其他數據庫,功能相對完善,加密方法較多。通常來講,數據加密分為對稱加密和非對稱加密。對稱加密:加密與解密使用同一密鑰,密鑰需要傳輸,安全性較弱,但性能較非對稱要好。非對稱加密:加密與解密使用不同密鑰(公鑰和私鑰),較對稱密鑰安全性較好,但是算法較復雜,帶來性能上的損失。因此,折中的方法是使用對稱密鑰加密數據,使用非對稱密鑰加密對稱密鑰。這樣既保證高性能,又提高密鑰的可靠性。
同樣,SQL Server 就使用了折中的方法,所以SQL Server 加密功能包含2個部分:數據加密和密鑰管理
數據加密
SQL Server支持以下多種加密算法

數據庫內的加密對象受DMK保護
支持的對稱加密算法:DES | TRIPLE_DES | TRIPLE_DES_3KEY | RC2 | RC4 | RC4_128| DESX | AES_128 | AES_192 | AES_256
非對稱加密算法:RSA_512 | RSA_1024 | RSA_2048
注意避免使用RC,DESX類算法,2014之后會刪除此功能
密鑰管理
SQL Server中加密是層級的,每一個上層為下提供保護。如圖:

由圖可以看出,加密是分層級的。每一個數據庫實例都擁有一個服務主密鑰(Service Master Key),這個密鑰是實例的根密鑰,在實例安裝的時候自動生成,其本身由Windows提供的數據保護API進行保護(Data Pertection API),服務主密鑰除了為其子節點提供加密服務之外,還用于加密一些實例級別的信息,比如實例的登錄名密碼或者鏈接服務器的信息。
在服務主密鑰之下的是數據庫主密鑰(Database Master Key),這個密鑰由服務主密鑰進行加密。這是一個數據庫級別的密鑰,可以用于為創建數據庫級別的證書或非對稱密鑰提供加密,每一個數據庫只能有一個數據庫主密鑰。
EKM模塊,這個比較特別,全稱可擴展密鑰管理模塊,該功能增強sqlserver密鑰管理的能力,允許將密鑰存儲到數據庫之外,包括一些硬件,如智能卡、USB設備或硬件安全模塊(HSM);并且允許使用第三方產品來管理密鑰和進行加密;另外,有條件的可以使用更高性能的HSM模塊來加解密,減少加解密上性能的損失。
實例

sqlserver2008
1.創建非對稱密鑰
- create asymmetric key asyc_key_enc
- with algorithm=RSA_1024
- encryption by password=N'Pass@word'
- go
2.創建對稱密鑰
- create symmetric key symc_key_enc
- with algorithm=Triple_DES
- encryption by password=N'Pass@word'
- go
3.創建證書
證書也可被其它方式保護
- create certificate cert_ENC
- with subject='certificate for ENC',expiry_date='20990101'
- go
4.對稱密鑰可由以上三種方式提供加密保護
4.1 由非對稱密鑰加密
- create symmetric key symc_key_enc_byAsyc
- with algorithm=AES_128
- encryption by asymmetric key asyc_key_enc
- go
4.2 由對稱密鑰加密
- open symmetric key symc_key_enc
- decryption by password=N'
- Pass@word';
- create symmetric key symc_key_enc_bySymc
- with algorithm = DES
- encryption by symmetric key symc_key_enc
- go
4.3 由證書加密
- create symmetric key symc_key_enc_byCert
- with algorithm =AES_128
- encryption by certificate cert_ENC
- go
【編輯推薦】