Archivos de la categoría: TDE

Respaldar Certificado en SQL Server

Hola gente, el día 14 de febrero publiqué un post pequeño sobre Cifrado de bases de datos en el que hablaba, justamente, como cifrar bases de datos. En el proceso creaba una master key y un certificado. En este pequeño post crearé un backup del certificado para que luego pueda ser importado en otra base de datos.

En una base de datos creada para este propósito, creé un certificado de esta manera:


USE TEST_Certificado;
CREATE CERTIFICATE MiCertificado_TEST
ENCRYPTION BY PASSWORD = '123456'
WITH SUBJECT = 'Prueba de Certificado',
EXPIRY_DATE = '20121031';
GO

El certificado fue creado en la base de datos TEST_Certificado y el certificado se llama MiCertificado_TEST. La clave es super segura y expira el 31 de octubre de este año.
En una nueva ventana de consultas, utilicé este código para respaldar el certificaco en el directorio que se indica:

USE TEST_Certificado
BACKUP CERTIFICATE MiCertificado_TEST TO FILE='C:Program FilesMicrosoft SQL ServerMSSQL11.MSSQLSERVERMSSQLBackupMiCertificado_TEST';
GO

Tambien se puede exportar certificado con clave privada con su respectiva clave de descifrado:

BACKUP CERTIFICATE MiCertificado_TEST TO FILE = 'C:Program FilesMicrosoft SQL ServerMSSQL11.MSSQLSERVERMSSQLBackupMiCertificado_TEST_2'
WITH PRIVATE KEY (DECRYPTION BY PASSWORD='123456', FILE = 'C:Program FilesMicrosoft SQL ServerMSSQL11.MSSQLSERVERMSSQLBackupMiCertificado_TEST_k' ,
ENCRYPTION BY PASSWORD = '123456' );
GO

No te pierdas la próxima entrega, en la cual mostraré como importar un certificado.

Saludos

Cifrando base de datos con TDE

Transparent Data Encryption es una característica que está disponible en SQL Server desde la versión 2008 y, obviamente, estará disponible en la futura versión 2012.

TDE realiza encriptacion y desencriptación de datos en tiempo real de los archivos de la base de datos (físicos) y de los archivos de log. La encriptación utiliza una clave de encriptación de base de datos (Desde ahora en adelante, DEK) que es almacenada en el registro de arranque de la base de datos, para que pueda estar disponible durante una recuperación.

Ejemplo:

Se tiene una base de datos llamada Prueba  con una tabla llamada Registro y tiene los siguientes datos:

Datos de la tabla Registro

Datos de la tabla Registro

Si realizo un respaldo de la base de datos:

  • Botón secundario en la base de datos
  • Tasks -> Back Up…

Y navego hasta la ruta C:Program FilesMicrosoft SQL ServerMSSQL11.MSSQLSERVERMSSQLBackup y abro el respaldo que recién generé con el bloc de notas, puedo encontrar la información:

<>Vista en Notepad

Vista en Notepad

Se puede ver los datos almacenados. Es más, entrega mucha información relevante sobre el sistema.

Ahora encriptemos la base de datos ( y de pasada, borramos el respaldo anterior). Para encriptar la base de datos se siguen los siguientes pasos:

  1. Crear la master key
  2. Crear u obtener un certificado protegido por la master key
  3. Crear un DEK y protegerla con el certificado
  4. Setear la base de datos para la encriptación.


USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD='Password@1';
GO
CREATE CERTIFICATE MiCertificado WITH SUBJECT='Mi certificado DEK';
GO
USE prueba;
GO
CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_128 ENCRYPTION BY SERVER CERTIFICATE MiCertificado;
ALTER DATABASE Prueba SET ENCRYPTION ON;
GO

TDE cifra hasta los respaldos que se pueden generar. Al crear uno y abrirlo con el notepad y buscar algun registro (como en el ejemplo anterior), arrojará un error:

Vista desde notepad del respaldo de una base de datos cifrada

Vista desde notepad del respaldo de una base de datos cifrada

Cabe recordar, que este proceso es transparente para las aplicaciones que funcionan sobre SQL Server.

Saludos!