SQL Server 2008 Error de la key maestra abierta al cambiar el server físico

Copié una database de SQL Server de un sistema a otro, la misma configuration, pero una máquina física completamente diferente. Utilicé Norton Ghost y recuperé files manualmente, por ejemplo, toda la carpeta de SQL Server 2008 encontrada en c: \ Archivos de progtwig después de volver a instalar SQL Server 2008 Express.

Una de mis bases de datos tiene el encryption AES_256 habilitado en varias de sus tablas y columnas. Reinstalé mi IIS7 e intenté ejecutar la aplicación que accede a la database, al recuperar los datos, aparece este error:

Error del server en la aplicación '/'. Cree una key maestra en la database o abra la key maestra en la session antes de realizar esta operación. Descripción: se produjo una exception no controlada durante la ejecución de la request web actual. Revise el seguimiento de la stack para get más información sobre el error y dónde se originó en el código.

Detalles de la exception: System.Data.SqlClient.SqlException: cree una key maestra en la database o abra la key maestra en la session antes de realizar esta operación.

Error de fuente:

Se generó una exception no controlada durante la ejecución de la request web actual. La información sobre el origen y la location de la exception se puede identificar utilizando el seguimiento de stack de exception a continuación.

He leído un poco y encontré algunos enlaces sobre cómo el encryption AES está vinculado con la key del equipo, pero no sé cómo copyrlo en el nuevo sistema. O tal vez este incluso no es el caso.

NOTA: Intenté soltar la key simétrica, el certificate y la key maestra y volver a crearlos. Esto elimina el error, pero los datos que se encriptan a través de AES_256 no aparecen. Sin embargo, las columnas que NO están encriptadas.

Cualquier ayuda sería muy apreciada. ¡Gracias por adelantado!

La key maestra de la database se cifra con la key maestra del server, que es específica de la máquina donde está instalado SQL Server. Cuando mueve la database a otro server, pierde la capacidad de descifrar automáticamente y abrir la key maestra de la database porque la key del server local probablemente será diferente. Si no puede descifrar la key maestra de la database, no puede descifrar nada que dependa de ella (certificates, keys simétricas, etc.).

Básicamente, desea volver a cifrar la key maestra de la database con la nueva key del server, lo que se puede hacer con esta secuencia de commands (utilizando admin privilegios):

-- Reset database master key for server (if database was restnetworking from backups on another server) OPEN MASTER KEY DECRYPTION BY PASSWORD = '---your database master key password---' ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY GO 

Tenga en count que cuando crea una key maestra de database, siempre debe proporcionar también una contraseña para poder abrir la key usando la contraseña en el escenario donde no se puede usar la key maestra de service. ¡Ojalá tenga esa contraseña almacenada en alguna parte!

De forma alternativa, puede restaurar una copy de security de la key maestra de la database, pero necesita una que se haya creado para el server de destino, no para el server de origen.

Si no tiene una copy de security o una contraseña, entonces no estoy seguro de que pueda recuperar los datos encryptions en el nuevo server, ya que tendrá que soltar y volver a crear la key maestra de la database con una nueva contraseña, que matará cualquier key y datos dependientes.

Acabo de tener una situación similar, una reconstrucción del server después de que murieran las unidades del sistema operativo. Reinstalé SQL y lo volví a conectar a todas mis bases de datos antiguas en las unidades de datos intactas. Todo funcionó excepto por mis columnas encriptadas. Pero mi problema era que la key de service principal estaba regada. Pude reparar mi key de service principal volviendo a la misma cnetworkingencial de dominio que había sido mi count de service del server SQL antes de la mudanza.

Este artículo me dio la solución (felicitaciones a Matt Bowler por su excelente artículo). Sabía que la key de la máquina local había cambiado, pero mi salvación fue que podía usar la misma count de service.

Clave maestra de service: en la parte superior de la jerarquía de keys está la key maestra de service. Hay una por instancia de SQL Server, es una key simétrica y se almacena en la database maestra. Utilizado para encriptar keys maestras de bases de datos, passwords del server vinculado y cnetworkingenciales, se genera en el primer arranque del server SQL.

No hay passwords configurables por el usuario asociadas con esta key; está encriptada por la count de service del Servidor SQL y la key del equipo local. Al iniciar, SQL Server puede abrir la key maestra de service con cualquiera de estos desencryptions. Si uno de ellos falla, SQL Server usará el otro y 'arreglará' el desencryption fallido (si ambos fallan, SQL Server tendrá error). Esto es para dar count de situaciones como clusters donde la key del equipo local será diferente después de una conmutación por error. Esta es también una de las razones por las cuales las counts de service deben cambiarse usando el Administrador de configuration de SQL Server, ya que el encryption de la key maestra de service se regenera correctamente.

http://mattsql.wordpress.com/2012/11/13/migrating-sql-server-databases-that-use-database-master-keys/

Intereting Posts