數(shù)據(jù)庫管理:SQL Server 2008安全性探討
Ruby 發(fā)表于:12年09月06日 11:18 [轉(zhuǎn)載] DOIT.com.cn
SQL Server加密
關(guān)于SQL Server 2008使用的加密層級結(jié)構(gòu),頂層是Windows層,其中包括Windows Data Protection API (DPAPI)。DPAPI負責使用本地機器密鑰加密服務的服務主密鑰。服務主密鑰是SQL環(huán)境中加密鏈的頂層。首次創(chuàng)建低級別的密鑰時,系統(tǒng)會自動生成服務主密鑰。
服務主密鑰的下面是數(shù)據(jù)庫主密鑰Database Master Key。數(shù)據(jù)庫主密鑰可以保護數(shù)據(jù)庫中所有證書的私鑰和非對稱密鑰的私鑰。它是采用3DES加密算法和密碼加密的對稱密鑰。該密鑰的副本使用服務主密鑰加密,并存儲在主數(shù)據(jù)庫和應用它的數(shù)據(jù)庫中。如果數(shù)據(jù)庫被轉(zhuǎn)移到另一個服務器上,可以使用OPEN MASTER KEY語句并提供加密密碼來解密數(shù)據(jù)庫主密鑰。
在數(shù)據(jù)庫作用域中,還有可用于加密數(shù)據(jù)庫的對稱密鑰和非對稱密鑰,以及可以用于數(shù)字簽名和實現(xiàn)不可否認性的證書。
應該首先創(chuàng)建數(shù)據(jù)庫主密鑰,記住數(shù)據(jù)庫主密鑰是對稱密鑰,用來加密數(shù)據(jù)庫中的所有私有密鑰數(shù)據(jù)。如果使用非對稱密鑰或證書,這是非常有用的,因為創(chuàng)建它們時不需要提供密碼或其它保護與雙方關(guān)聯(lián)的私鑰的機制。要為AdventureWorks2008數(shù)據(jù)庫創(chuàng)建一個新的主密鑰,可以執(zhí)行下面的命令:
創(chuàng)建主密鑰需要數(shù)據(jù)庫的CONTROL權(quán)限,如果已經(jīng)創(chuàng)建了一個主密鑰,那么要想創(chuàng)建新的主密鑰,必須刪除現(xiàn)有的主密鑰。如果現(xiàn)有的主密鑰已被用來加密數(shù)據(jù)庫中的一個私鑰,那么就不能刪除它了。一旦創(chuàng)建了主密鑰,就可以查詢sys.database目錄視圖,通過 is_master_key_encrypted_by_server列查看該數(shù)據(jù)庫主密鑰是否已經(jīng)使用服務主密鑰加密。該列使用一個布爾值表明數(shù)據(jù)庫主密鑰是否使用服務主密鑰加密。如果數(shù)據(jù)庫主密鑰是在另一個服務器上創(chuàng)建的,該值就為0
- SELECT NAME, [is_master_key_encrypted_by_server] FROM sys.databases
在繼續(xù)討論使用其他密鑰之前,讓我們看一下如何備份服務主密鑰和數(shù)據(jù)庫主密鑰。如果必須進行災難恢復,且需要恢復使用這些密鑰之一加密的數(shù)據(jù),那么這將是相當有用的。梁宗密鑰的語法是相似的,但需要額外的一部來備份加密的數(shù)據(jù)庫主密鑰。
首先看服務主密鑰,在BACKUP SERVICE MASTER KEY語句中使用一個文件路徑,可以是一個本地或UNC路徑,以及一個滿足密碼復雜度要求的密碼,備份文件時使用密碼可以防止他人將您的主密鑰還原到另一臺服務器上,然后解密您的數(shù)據(jù)庫主密鑰
- BACKUP SERVICE MASTER KEY TO FILE='C:\KyeBackups\ServiceMasterKey' ENCRYPTION BY PASSWORD='c@MplexP@ssw0rd'; --如果需要還原該服務主密鑰,可使用
- RESTORE SERVICE MASTER KEY FROM FILE='C:\KyeBackups\ServiceMasterKey' DECRYPTION BY PASSWORD='c@MplexP@ss0rd';
備份和還原數(shù)據(jù)庫主密鑰的方法如下:
- --Backup the database master key
- USE AdventureWorks2008; OPEN MASTER KEY DECRYPTION BY PASSWORD='P@ssw0rd'
- BACKUP MASTER KEY TO FILE='C:\KyeBackups\AWorksMasterKey' ENCRYPTION BY PASSWORD='dn9e8h93ndwjKJD'; GO
- --Restore the database master key
- USE AdventureWorks2008; RESTORE MASTER KEY FROM FILE='C:\KyeBackups\ServiceMasterKey'
- DECRYPTION BY PASSWORD='dn9e8h93ndwjKJD' ENCRYPTION BY PASSWORD='P@ss0rd'
- GO