2012-03-27 6 views
0

一部の列を暗号化するために、対称暗号化を有効にしたDBがあります。 は私がデータ暗号化を使用するSql Server 2008R2エンタープライズ

CREATE PROCEDURE [dbo].[sys_EnableSymmetricEncryption] 
AS 
BEGIN 
--If there is no master key, create one now. 
IF NOT EXISTS 
    (SELECT * FROM sys.symmetric_keys WHERE symmetric_key_id = 101) 
    CREATE MASTER KEY ENCRYPTION BY 
    PASSWORD = '9809u0ij989oih9o8yyo98yyo89uyp9p9' 

CREATE CERTIFICATE My_Certificate 
    WITH SUBJECT = 'My Database'; 

CREATE SYMMETRIC KEY My_Key_01 
    WITH ALGORITHM = AES_256 
    ENCRYPTION BY CERTIFICATE My_Certificate; 
END 

以下のように、スクリプトからDBを作成した後、私はこれを実行して、スクリプトからDBを作成するので、後に暗号化を有効にするには、SPを作成し、私は

で暗号化された列
にデータを保存することができます
INSERT INTO [dbo].[Cards] 
     ([CardNumber] 
     ,[CardSecurityCode] 
     ,[CardExpirationDate] 
     ,[NameOnCard]) 
VALUES 
    (EncryptByKey(Key_GUID('My_Key_01'), @CardNumber) , 
    EncryptByKey(Key_GUID('My_Key_01'), @CardSecurityCode) , 
    EncryptByKey(Key_GUID('My_Key_01'), @CardExpirationDate) , 
    EncryptByKey(Key_GUID('My_Key_01'), @NameOnCard)) 

OPEN SYMMETRIC KEY My_Key_01 
    DECRYPTION BY CERTIFICATE My_Certificate; 

SELECT [CardID] 
     ,CONVERT(nvarchar, DecryptByKey([CardNumber])) as 'CardNumber' 
     ,CONVERT(nvarchar, DecryptByKey([CardSecurityCode])) as 'CardSecurityCode' 
     ,CONVERT(nvarchar, DecryptByKey([CardExpirationDate])) as 'CardExpirationDate' 
     ,CONVERT(nvarchar, DecryptByKey([NameOnCard])) as 'NameOnCard' 
    FROM [Cards] 

すべてのIバックアップデシベルまでうまく機能し、差分のバックアップを復元しようとデータを取得私は選択を(上記のように)私は

Please create a master key in the database or open the master key in the session before performing this operation.

は、だから私は選択の上、その後

IF NOT EXISTS 
    (SELECT * FROM sys.symmetric_keys WHERE symmetric_key_id = 101) 
    CREATE MASTER KEY ENCRYPTION BY 
    PASSWORD = '9809u0ij989oih9o8yyo98yyo89uyp9p9' 

でキーを再作成しようとしていたが、このエラーを取得する実行しようとすると、復元した後erentサーバ 同じエラーが表示されます。 私はマスターキー、証明書および対称鍵を作成するには、上に示した最初のSpのを実行しようとすると、私はエラー

Msg 15581, Level 16, State 3, Procedure sys_EnableSymmetricEncryption, Line 11 Please create a master key in the database or open the master key in the session before performing this operation. Msg 15282, Level 16, State 1, Procedure sys_EnableSymmetricEncryption, Line 14 A key with name 'OneTest_Key_01' or user defined unique identifier already exists or you do not have permissions to create

を取得たぶん私はそれらを作成しようとする前に、証明書および対称鍵を削除しようとする必要がありますしかし、彼らはどこに位置しているのかわかりません。

これをどのように処理するか考えてください。

おかげ

PS私が同じサーバー、でもとして別のデータベースにリストアする場合は、すべての罰金

答えて

1

に動作しますが、実行してみ:

ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = '9809u0ij989oih9o8yyo98yyo89uyp9p9'; 
+0

私はこれを実行すると、私は次のエラーを取得しますメッセージ15329、レベル16、状態20、行1 現在のマスターキーは復号化できません。これがデータベースマスターキーの場合は、この操作を実行する前にセッションで開こうとする必要があります。 FORCEオプションを使用すると、このエラーを無視して操作を続行できますが、古いマスターキーで暗号化されたデータは失われます。
アイデア? – bzamfir

+0

不幸にも他のアイデアはありません。私はWebで見つけたものだけを共有することができた: http://social.msdn.microsoft.com/Forums/en-US/sqlsecurity/thread/1962ea62-28d8-4331-af6e-a73e1a0d4bcc/ http:// stackoverflow。 com/questions/2017865/sql-server-2008-open-master-key-error-upon-physical-server-change-over – cichy

関連する問題