Restaurar la base de datos cifrada a otro servidor


10

Estoy usando un producto que se ejecuta en SQLServer 2008. Es comprensible que la compañía que lo suministra no ofrezca soporte para SQLServer. Cuando instalé el producto, especifiqué una contraseña para cifrar la base de datos. Me gustaría ejecutar otra copia del producto para probar en otro servidor. He restaurado la base de datos a otro servidor e instalado el producto en ese otro servidor. Cuando lo instalé, proporcioné la misma contraseña y luego restauré una copia de seguridad del servidor principal. Sin embargo, recibo el mensaje de error:

System.Data.SqlClient.SqlException: An error occurred during decryption.

del producto Puedo acceder a las tablas usando el estudio SQLServer Management.

He intentado esto:

en el primer servidor:

CREATE CERTIFICATE cert1 WITH SUBJECT = 'Certificate for my stuff'

BACKUP CERTIFICATE  cert1 TO FILE = 'd:\backup\cert1.dat' 
WITH PRIVATE KEY 
(
ENCRYPTION BY PASSWORD = 'mypassword',
FILE = 'd:\backup\cert1_privatekey.dat'
)

en el segundo servidor:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'mypassword'

CREATE CERTIFICATE cert1 FROM FILE = 'd:\cert1.dat'
WITH PRIVATE KEY
(
FILE = 'd:\cert1_privatekey.dat',
DECRYPTION BY PASSWORD = 'mypassword'
)

También probé esto en el segundo servidor:

alter MASTER KEY regenerate with enCRYPTION BY PASSWORD='password'

pero eso dio un mensaje de error sobre una clave asimétrica.

¿Cómo puedo restaurar la copia de seguridad del primer servidor en el segundo servidor?

Actualizar:

También hay una clave asimétrica y simétrica en la base de datos. Si abro la clave simétrica usando la clave asimétrica, obtengo el mismo error, así que creo que es por eso que no funciona: de alguna manera, las claves no se transfieren de tal manera que puedan usarse.

Respuestas:


8

Yo escribí una entrada de blog acerca del reflejo y TDE.

Me tomó un tiempo darme cuenta de que para obtener la base de datos en el servidor secundario, necesitaba la línea de código:

 OPEN MASTER KEY DECRYPTION BY PASSWORD = 'SomePassword'
 ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
 GO

La contraseña es la misma que utilicé para cifrar el archivo de clave maestra. Después de emitir el comando en el segundo servidor SQL, todo funcionó muy bien. Aquí está la publicación db.stackexchange que hice también.


Esa entrada de blog es útil. Lo he seguido, excepto que en lugar de "maestro", uso la base de datos particular que quiero copiar. Obtengo el error "Se produjo un error al descifrar la clave asimétrica 'asym_something' que fue cifrada por la antigua clave maestra. La opción FORCE puede usarse para ignorar este error y continuar la operación, pero los datos que no pueden ser descifrados por la antigua clave maestra no estará disponible ". cuando restauro la clave maestra del archivo. ¿Debería forzarlo? (Esto es después he restaurado la base de datos, mientras que sus instrucciones han restauración de la tarde.)
paulmorriss

1
Gracias, me llevó demasiado tiempo darme cuenta. eek, no estoy seguro de que debas forzarlo. Según tengo entendido, las "claves" están vinculadas a las bases de datos MASTER en cada servidor. Lo único que está vinculado a la base de datos es el certificado firmado por la clave maestra. Por lo tanto, debe crear una clave maestra en el servidor1, hacer una copia de seguridad y luego restaurar la clave en el servidor 2. Luego, mueva el certificado para la base de datos. Espero que alguien más pueda arrojar algo de luz sobre el tema.
RateControl el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.