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

數(shù)據(jù)庫內(nèi)的加密對象受DMK保護(hù)
支持的對稱加密算法: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中加密是層級的,每一個上層為下提供保護(hù)。如圖:

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

sqlserver2008
1.創(chuàng)建非對稱密鑰
- create asymmetric key asyc_key_enc
- with algorithm=RSA_1024
- encryption by password=N'Pass@word'
- go
2.創(chuàng)建對稱密鑰
- create symmetric key symc_key_enc
- with algorithm=Triple_DES
- encryption by password=N'Pass@word'
- go
3.創(chuàng)建證書
證書也可被其它方式保護(hù)
- create certificate cert_ENC
- with subject='certificate for ENC',expiry_date='20990101'
- go
4.對稱密鑰可由以上三種方式提供加密保護(hù)
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
【編輯推薦】