數(shù)據(jù)庫(kù)管理:SQL Server 2008安全性探討
Ruby 發(fā)表于:12年09月06日 11:18 [轉(zhuǎn)載] DOIT.com.cn
SQL Server加密
關(guān)于SQL Server 2008使用的加密層級(jí)結(jié)構(gòu),頂層是Windows層,其中包括Windows Data Protection API (DPAPI)。DPAPI負(fù)責(zé)使用本地機(jī)器密鑰加密服務(wù)的服務(wù)主密鑰。服務(wù)主密鑰是SQL環(huán)境中加密鏈的頂層。首次創(chuàng)建低級(jí)別的密鑰時(shí),系統(tǒng)會(huì)自動(dòng)生成服務(wù)主密鑰。
服務(wù)主密鑰的下面是數(shù)據(jù)庫(kù)主密鑰Database Master Key。數(shù)據(jù)庫(kù)主密鑰可以保護(hù)數(shù)據(jù)庫(kù)中所有證書(shū)的私鑰和非對(duì)稱(chēng)密鑰的私鑰。它是采用3DES加密算法和密碼加密的對(duì)稱(chēng)密鑰。該密鑰的副本使用服務(wù)主密鑰加密,并存儲(chǔ)在主數(shù)據(jù)庫(kù)和應(yīng)用它的數(shù)據(jù)庫(kù)中。如果數(shù)據(jù)庫(kù)被轉(zhuǎn)移到另一個(gè)服務(wù)器上,可以使用OPEN MASTER KEY語(yǔ)句并提供加密密碼來(lái)解密數(shù)據(jù)庫(kù)主密鑰。
在數(shù)據(jù)庫(kù)作用域中,還有可用于加密數(shù)據(jù)庫(kù)的對(duì)稱(chēng)密鑰和非對(duì)稱(chēng)密鑰,以及可以用于數(shù)字簽名和實(shí)現(xiàn)不可否認(rèn)性的證書(shū)。
應(yīng)該首先創(chuàng)建數(shù)據(jù)庫(kù)主密鑰,記住數(shù)據(jù)庫(kù)主密鑰是對(duì)稱(chēng)密鑰,用來(lái)加密數(shù)據(jù)庫(kù)中的所有私有密鑰數(shù)據(jù)。如果使用非對(duì)稱(chēng)密鑰或證書(shū),這是非常有用的,因?yàn)閯?chuàng)建它們時(shí)不需要提供密碼或其它保護(hù)與雙方關(guān)聯(lián)的私鑰的機(jī)制。要為AdventureWorks2008數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)新的主密鑰,可以執(zhí)行下面的命令:
創(chuàng)建主密鑰需要數(shù)據(jù)庫(kù)的CONTROL權(quán)限,如果已經(jīng)創(chuàng)建了一個(gè)主密鑰,那么要想創(chuàng)建新的主密鑰,必須刪除現(xiàn)有的主密鑰。如果現(xiàn)有的主密鑰已被用來(lái)加密數(shù)據(jù)庫(kù)中的一個(gè)私鑰,那么就不能刪除它了。一旦創(chuàng)建了主密鑰,就可以查詢(xún)sys.database目錄視圖,通過(guò) is_master_key_encrypted_by_server列查看該數(shù)據(jù)庫(kù)主密鑰是否已經(jīng)使用服務(wù)主密鑰加密。該列使用一個(gè)布爾值表明數(shù)據(jù)庫(kù)主密鑰是否使用服務(wù)主密鑰加密。如果數(shù)據(jù)庫(kù)主密鑰是在另一個(gè)服務(wù)器上創(chuàng)建的,該值就為0
- SELECT NAME, [is_master_key_encrypted_by_server] FROM sys.databases
在繼續(xù)討論使用其他密鑰之前,讓我們看一下如何備份服務(wù)主密鑰和數(shù)據(jù)庫(kù)主密鑰。如果必須進(jìn)行災(zāi)難恢復(fù),且需要恢復(fù)使用這些密鑰之一加密的數(shù)據(jù),那么這將是相當(dāng)有用的。梁宗密鑰的語(yǔ)法是相似的,但需要額外的一部來(lái)備份加密的數(shù)據(jù)庫(kù)主密鑰。
首先看服務(wù)主密鑰,在BACKUP SERVICE MASTER KEY語(yǔ)句中使用一個(gè)文件路徑,可以是一個(gè)本地或UNC路徑,以及一個(gè)滿(mǎn)足密碼復(fù)雜度要求的密碼,備份文件時(shí)使用密碼可以防止他人將您的主密鑰還原到另一臺(tái)服務(wù)器上,然后解密您的數(shù)據(jù)庫(kù)主密鑰
- BACKUP SERVICE MASTER KEY TO FILE='C:\KyeBackups\ServiceMasterKey' ENCRYPTION BY PASSWORD='c@MplexP@ssw0rd'; --如果需要還原該服務(wù)主密鑰,可使用
- RESTORE SERVICE MASTER KEY FROM FILE='C:\KyeBackups\ServiceMasterKey' DECRYPTION BY PASSWORD='c@MplexP@ss0rd';
備份和還原數(shù)據(jù)庫(kù)主密鑰的方法如下:
- --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
公司簡(jiǎn)介 | 媒體優(yōu)勢(shì) | 廣告服務(wù) | 客戶(hù)寄語(yǔ) | DOIT歷程 | 誠(chéng)聘英才 | 聯(lián)系我們 | 會(huì)員注冊(cè) | 訂閱中心
Copyright © 2013 DOIT Media, All rights Reserved. 北京楚科信息技術(shù)有限公司 版權(quán)所有.