2012-03-27 3 views
0

Ich habe eine DB, auf der ich symmetrische Verschlüsselung aktiviert, um einige Spalten zu verschlüsseln. habe ich eine SP-Verschlüsselung zu aktivieren, nachdem ich die DB aus Skript zu erstellen, wie untenSQL Server 2008R2 Enterprise mit Datenverschlüsselung - Backup und Restore

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 

So, nachdem ich db aus Skript, ich das laufen und dann kann ich Speichern von Daten in verschlüsselten Spalten
mit

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)) 

und abrufen von Daten mit

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] 

Alle funktioniert gut, bis ich backup db und versuchen, die Sicherung auf einem diff wiederherstellen Erent Server Nachdem ich wieder herstellen, wenn ich versuche, wählen zu laufen (wie oben) bekomme ich diesen Fehler

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

Also ich versuche, den Schlüssel mit

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

neu Aber dann wählen In immer noch den gleichen Fehler. Wenn ich versuche, das erste Sp gezeigt oben zu laufen, Hauptschlüssel, cert und symmetrischen Schlüssel zu erstellen, erhalte ich Fehler

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

Vielleicht sollte ich versuchen, das Zertifikat und den symmetrischen Schlüssel zu löschen, bevor Sie versuchen, sie zu schaffen aber ich weiß nicht wo sie sich befinden.

Irgendeine Idee, wie man damit umgeht?

Dank

PS, wenn ich in demselben Server wiederherstellen, auch wenn andere Datenbank, arbeitet alles in Ordnung

Antwort

1

Versuch auszuführen:

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

Als ich das ich die folgende Fehlermeldung aus:
Meldung 15329, Ebene 16, Status 20, Zeile 1 Der aktuelle Hauptschlüssel kann nicht entschlüsselt werden. Wenn dies ein Datenbankhauptschlüssel ist, sollten Sie versuchen, ihn in der Sitzung zu öffnen, bevor Sie diesen Vorgang ausführen. Die FORCE-Option kann verwendet werden, um diesen Fehler zu ignorieren und die Operation fortzusetzen, aber die Daten, die mit dem alten Hauptschlüssel verschlüsselt wurden, gehen verloren.
Irgendeine Idee? – bzamfir

+0

leider keine anderen Ideen. Ich konnte nur teilen, was ich im Netz fand: http://social.msdn.microsoft.com/Forums/en-US/sqlsecurity/thread/1962ea62-28d8-4331-af6e-a73e1a0d4bcc/ http: // stackoverflow. com/questions/2017865/sql-server-2008-öffnen-master-key-error-on-physischen-server-change-over – cichy