把一個用sql server 2005內置加密方法加密數據的DB從一臺電腦備份後,還原到另外一臺電腦上,出現的問題的處理辦法

這篇文章要解決的問題是:

把一個用sql server 2005內置加密方法加密數據的DB從一臺電腦備份後,還原到另外一臺電腦上,出現的問題的處理辦法.

 

文章中的處理方法可行的前提是:

一個DB用了sql server 2005的加密方法,方法是這樣的

CREATE master KEY ENCRYPTION BY PASSWORD = '1234';

 

 

CREATE CERTIFICATE Certificate1

   WITH SUBJECT = 'description for key',

   EXPIRY_DATE = '12/31/2020';

 

 

CREATE SYMMETRIC KEY KeyNameTest

WITH ALGORITHM = TRIPLE_DES

ENCRYPTION BY CERTIFICATE Certificate1;

這些語句表示,整個DB的數據用symmetric key來加密,而這個symmetric key又是用Certificate1來加密,Certificate1沒有指定密碼,所以它默認是用master key來加密的,這裏一定經記住master key的密碼是1234, 這對後邊的步聚很重要.

 

下邊來說一下步聚:

1.      從源DB來,備份出一個文件。

2.       DB還原來目的數據庫,執行程序, 會出現下圖的錯誤

a

直接入行存儲過程也出同樣的錯誤,如下圖

 b

3.       上邊的密碼1234這裏就要用到了,執行如下語句

OPEN MASTER KEY DECRYPTION BY PASSWORD = '1234'

ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = '1234'

 

 c

4.       執行成功後,就可成界進入界面,或直接執行存儲過程

 

 

5.       在一個羣裏有一個朋友提供另一種方法(針對另一種問題

但我試了,發現語句OPEN MASTER KEY DECRYPTION BY SERVICE MASTER KEY都根本不可執行,

--QA:附加數據庫時,如果數據庫主密鑰的密碼丟失怎麼辦?

--當一個數據庫被附加到一個新得sql server實例後,它的數據庫主密鑰(database master key)默認不會被服務器主密鑰

--(service master key)保護.在這種情況下,我們需要自己修改這種狀態,使它被服務器主密鑰保護。

--但如果忘記了數據庫主密鑰得密碼,則無法完成這項操作.

--

--

--如何解決這一問題:

--在原始實例上爲db1的數據庫添加新的密碼,這樣我們就可以在新的實例中使用這個密碼了.

--

--在原始實例上執行一下代碼:

 

OPEN MASTER KEY DECRYPTION BY SERVICE MASTER KEY

ALTER MASTER KEY ADD ENCRYPTION BY PASSWORD = 'new password'

CLOSE MASTER KEY

 

 

--在新實例中:

 

OPEN MASTER KEY DECRYPTION BY PASSWORD = 'new password'

ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY

CLOSE MASTER KEY

 

6.       我在網上搜了一下關鍵字OPEN MASTER KEY DECRYPTION BY SERVICE後,對我的方法改進了一下,因爲我的方法有時侯備份還原是不行的,有時侯就可以,網上也有人說過,但我還沒詳細看過他們的文章,我改進後的方法是可以隨時隨行的. 代碼如下:

(前提還得是要記得原來的master key的密碼, 並不像第五點中所說的)

OPEN MASTER KEY DECRYPTION BY PASSWORD = '123456'

 

ALTER MASTER KEY DROP ENCRYPTION BY SERVICE MASTER KEY

ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY

 

ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = '123456'

7.        

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章