標籤:style blog http color io os 使用 ar for
在SQL Server中的加密由階層形式進行處理以提供多層級的安全。SQL Server包含兩個用於加密資料的密鑰類型。如:
1、伺服器主要金鑰(Service Master Key),位於階層的最頂端,並且在安裝SQL Server時自動建立,用於加密系統資料、連結的伺服器登入名稱以及資料庫主要金鑰。在第一次通過SQL Server使用服務主要金鑰來加密認證、資料庫主要金鑰或連結的伺服器主密碼時,服務主要金鑰會自動產生,並且使用SQL Server服務賬戶的Windows認證來產生它。如果必須改變SQL Server服務帳號,微軟建議使用SQL Server組態管理員,因為這個工具將執行產生新服務主要金鑰需要的合適的解密和加密方法,而且可以使加密階層保持完整。服務主要金鑰也用於加密其下的資料庫主要金鑰。
2、資料庫主要金鑰(Database Master Key),用於加密認證,以及非對稱金鑰和對稱金鑰。所有資料庫都可以只包含一個資料庫主要金鑰,在建立它時,通過服務主要金鑰對其加密。建立非對稱金鑰時,可以決定在加密非對稱金鑰對應的私密金鑰是否包含密碼。如果示包含密碼,將使用資料庫主要金鑰來加密私密金鑰。
我們看一組例子:
樣本一、備份及還原服務主要金鑰
用到以下兩個sql命令:
BACKUP SERVICE MASTER KEY 匯出服務主要金鑰。(http://msdn.microsoft.com/zh-cn/library/ms190337.aspx)
RESTORE SERVICE MASTER KEY從備份檔案中匯入服務主要金鑰。(http://msdn.microsoft.com/zh-cn/library/ms187972.aspx)
--以下語句備份服務主要金鑰到C:\SqlBackup\SMK.bakBACKUP SERVICE MASTER KEYTOFILE=‘C:\SqlBackup\SMK.bak‘ENCRYPTION BY PASSWORD =‘MakeItAGoodOne!1AB‘----注意該密碼可以使用單引號go--恢複服務主要金鑰RESTORE SERVICE MASTER KEYFROMFILE=‘H:\SqlBackup\SMK.bak‘DECRYPTION BY PASSWORD =‘MakeItAGoodOne!1AB‘go
如果該密鑰沒有實際變化,而執行金鑰復原時,會收到提示:
--The old and new master keys are identical. No data re-encryption is required.
樣本二、建立、再產生和刪除資料庫主要金鑰
用到以下兩個sql命令:
CREATE MASTER KEY 建立資料庫主要金鑰(http://technet.microsoft.com/zh-cn/library/ms174382.aspx)
ALTER MASTER KEY 重建資料庫主要金鑰(http://msdn.microsoft.com/en-us/library/ms186937%28SQL.90%29.aspx)
DROP MASTER KEY 刪除資料庫主要金鑰(http://msdn.microsoft.com/en-us/library/ms180071.aspx)
當資料庫主要金鑰被顯式建立時,會同時自動產生一個額外產生的安全層,用於加密資料庫中的新認證和非對稱金鑰,更進一步保護已加密的資料。
IFNOTEXISTS (SELECT nameFROM sys.databasesWHERE name =‘BookStore‘)BEGINCREATEDATABASE BookStoreENDGOUSE BookStoreGO--建立資料庫主要金鑰CREATE MASTER KEY ENCRYPTION BY PASSWORD =‘password‘goUSE BookStoreGO--重建資料庫主要金鑰ALTER MASTER KEY[FORCE] REGENERATE WITH ENCRYPTION BY PASSWORD =‘password‘--刪除資料庫主要金鑰USE BookStoreGODROP MASTER KEY
注意:如果該資料庫主要金鑰仍然被其他資料庫物件使用,則不能被刪除,這點與架構類似。
同時一旦建立資料庫主要金鑰,就立刻備份它是一個好的習慣。
樣本三、備份、恢複一個資料庫主要金鑰
文法:
BACKUP MASTER KEY匯出服務主要金鑰。(http://technet.microsoft.com/en-us/library/ms174387.aspx)
RESTORE MASTER KEY從備份檔案中匯入資料庫主要金鑰。(http://msdn.microsoft.com/en-us/library/ms186336.aspx)
下面是一個完整樣本:
--備份資料庫主要金鑰USE BookStoreGOCREATE MASTER KEY ENCRYPTION BY PASSWORD =‘MagneticFields!‘GOBACKUP MASTER KEYTOFILE=‘H:\SqlBackup\BookStore_Master_Key.BAK‘ENCRYPTION BY PASSWORD =‘4D280837!!!‘--恢複資料庫主要金鑰RESTORE MASTER KEYFROMFILE=‘H:\SqlBackup\BookStore_Master_Key.BAK‘DECRYPTION BY PASSWORD =‘4D280837!!!‘ENCRYPTION BY PASSWORD =‘MagneticFields!‘
與服務主要金鑰類似,如果沒有修改,則會收到如下提示:
The old and new master keys are identical. No data re-encryption is required.
樣本三、從資料庫主要金鑰刪除服務主要金鑰
當一個資料庫主要金鑰被建立時,它被預設使用兩種方式加密:服務主要金鑰和被使用CREATE MASTER KEY 命令中使用的密碼。如果你不想使用服務主密碼加密資料庫主要金鑰(這種情況下,擁有sysadmin特權的login在不知道資料庫主要金鑰的前提下將不能訪問加密資料),你可以使用ALTER MASTER KEY 命令刪除服務主要金鑰。
簡略文法如下:
ALTER MASTER KEY
ADD ENCRYPTION BY SERVICE MASTER KEY |
DROP ENCRYPTION BY SERVICE MASTER KEY
由於服務主要金鑰允許擁有足夠許可(如sysadmin)的使用者自動使用資料庫主要金鑰解密,因此,一旦刪除了服務主要金鑰的加密,而再想修改資料庫主要金鑰時,你必須使用一個新的命令訪問它。OPEN MASTER KEY, 文法如下:
OPEN MASTER KEY DECRYPTION BY PASSWORD = ‘password‘
下面是一個例子:
ALTER MASTER KEYDROP ENCRYPTION BY SERVICE MASTER KEY--一旦執行,任何資料庫主要金鑰的修改需要使用OPEN MASTER KEY的口令訪問,這樣是為了重新應用服務主要金鑰的加密OPEN MASTER KEY DECRYPTION BY PASSWORD =‘MagneticFieldS!‘--一旦服務主要金鑰被用於加密資料庫主要金鑰,資料庫主要金鑰不再需要被顯式開啟或關閉。ALTER MASTER KEYADD ENCRYPTION BY SERVICE MASTER KEY--關閉資料庫主要金鑰CLOSE MASTER KEY
小結:
1、本文主要介紹服務主要金鑰的備份與還原,資料庫的主要金鑰的建立、重建、刪除和備份、還原。
2、一旦建立主要金鑰,立刻備份它是一個很好的習慣。
下文將主要介紹非對稱金鑰密碼編譯(Asymmetric Key Encryption)
SQL Server 2008中的代碼安全===主要金鑰