0% encontró este documento útil (0 votos)
93 vistas6 páginas

Encriptación de Datos en SQL Server - Parte 2 - Memorias de Un DBA

Este documento explica cómo usar certificados para encriptar datos en SQL Server. Describe cómo crear un certificado autofirmado, encriptar e insertar datos usando el certificado, y dar permisos a un usuario para que pueda desencriptar los datos. También cubre la importancia de hacer copias de seguridad de los certificados para poder recuperar los datos en caso de que se pierda el certificado original.

Cargado por

carlos20093360
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
93 vistas6 páginas

Encriptación de Datos en SQL Server - Parte 2 - Memorias de Un DBA

Este documento explica cómo usar certificados para encriptar datos en SQL Server. Describe cómo crear un certificado autofirmado, encriptar e insertar datos usando el certificado, y dar permisos a un usuario para que pueda desencriptar los datos. También cubre la importancia de hacer copias de seguridad de los certificados para poder recuperar los datos en caso de que se pierda el certificado original.

Cargado por

carlos20093360
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 6

Encriptacin de datos en SQL Server Parte 2 | Memorias de un DBA

http://dbamemories.wordpress.com/2011/10/04/encriptacion-de-datos-...

Memorias de un DBA
Un blog dedicado a contribuir a la comunidad SQL Server en espaol

Encriptacin de datos en SQL Server Parte 2


con 5 comentarios Aboutcontinuando Hola, these ads con esta serie de post relacionados con la encriptacin de datos dentro de la base de datos SQL Server y utilizando las mismas herramientas que el motor de base de datos, en este articulo cubriremos la encriptacion en base a un certicado. Si desea se puede visitar el anterior post haciendo clic aqui. Certicate: SQL Server permite la encriptacin de la informacin a travs de certicados digitales los cuales pueden ser adquiridos en alguna de las entidades que los expiden. Adicionalmente SQL Server tambien permite la creacin de certicados self-signed los cuales permiten al usuario crear un certicado propio con una sentencia simple de T-SQL. Los certicados en SQL Server pueden estar encriptados por un password, o por la Database Master Key, la cual es la primera llave que se debe crear en la base de datos para que a partir de sta se encripten los dems objetos. A travs de los certicados se puede tener un poco mas de seguridad ya que para poder usar un certicado es necesario tener permiso al mismo para poder utilizarlo. A continuacin hare un ejemplo completo de la creacin de un certicado self-signed encriptado a partir de la Database Master Key adems se mostrara la encriptacin y desencriptacin de la informacin con el mismo. Adems se mostrara como es que se debe dar permisos a un usuario para que este pueda ver la informacin encriptada por el certicado. -- limpiamos el ambiente IF (DATABASEPROPERTY('SecureDB','version') > 0) BEGIN USE MASTER ALTER DATABASE SecureDB SET single_user WITH ROLLBACK IMMEDIATE DROP DATABASE SecureDB END Creamos la base de datos de prueba USE MASTER GO CREATE DATABASE SecureDB GO Usamos nuestra base de datos de demo USE SecureDB GO

1 de 6

10/05/2013 14:39

Encriptacin de datos en SQL Server Parte 2 | Memorias de un DBA

http://dbamemories.wordpress.com/2011/10/04/encriptacion-de-datos-...

Creamos una tabla cualquiera con una columna DocNum de tipo varbinary para que contenga la informacion encriptada CREATE TABLE dbo.CerticateEncription (Nombres VARCHAR(100) ,DocNum VARBINARY(128)) GO Creamos una Database Master Key CREATE MASTER KEY ENCRYPTION BY PASSWORD = MiClaveSegura GO Creamos el certicado CREATE CERTIFICATE MiPrimerCerticado WITH SUBJECT=DBAMemories Certicate, EXPIRY_DATE = 12/31/2012 GO Revisamos los certicados que tengo creados en la db SELECT name, pvt_key_encryption_type_desc, subject, expiry_date FROM sys.certicates /* name pvt_key_encryption_type_desc subject expiry_date - - MiPrimerCerticado ENCRYPTED_BY_MASTER_KEY DBAMemories Certicate 2012-12-31 00:00:00.000 */ insertamos un valor INSERT INTO dbo.CerticateEncription (Nombres, DocNum) VALUES (Juan Perez, ENCRYPTBYCERT(CERT_ID(MiPrimerCerticado),12345678)) GO Intentamos hacer un select convencional SELECT Nombres, DocNum FROM dbo.CerticateEncription /* Nombres DocNum - Juan Perez 0x9E363FDB9 */ Ahora seleccionamos los datos pero antes los desencriptamos con el certicado SELECT Nombres, CONVERT(VARCHAR(8),DECRYPTBYCERT(CERT_ID(MiPrimerCerticado),DocNum)) AS DocNum FROM dbo.CerticateEncription /* Nombres DocNum - Juan Perez 12345678 */ Creamos un usuario de prueba

2 de 6

10/05/2013 14:39

Encriptacin de datos en SQL Server Parte 2 | Memorias de un DBA

http://dbamemories.wordpress.com/2011/10/04/encriptacion-de-datos-...

CREATE LOGIN [Usuario1] WITH PASSWORD = N123 GO CREATE USER [Usuario1] FOR LOGIN [Usuario1] GO GRANT SELECT ON dbo.CerticateEncription TO Usuario1 GO Probamos seleccionar la informacion con el certicado EXECUTE AS USER = Usuario1 SELECT Nombres, CONVERT(VARCHAR(8),DECRYPTBYCERT(CERT_ID(MiPrimerCerticado),DocNum)) AS DocNum FROM dbo.CerticateEncription; REVERT /* Nombres DocNum - Juan Perez NULL */ Como se puede ver la informacion sale como NULL debido a que no tenemos permiso para usuar el certicado como el Usuario1 Para poder hacer uso del certicado debemos tener el permiso de control sobre el certicado. Ahora asignaremos ese permiso al Usuario1 GRANT CONTROL ON CERTIFICATE::[MiPrimerCerticado] TO [Usuario1] GO Probamos nuevamente seleccionar la informacion con el certicado EXECUTE AS USER = Usuario1 SELECT Nombres, CONVERT(VARCHAR(8),DECRYPTBYCERT(CERT_ID(MiPrimerCerticado),DocNum)) AS DocNum FROM dbo.CerticateEncription; REVERT /* Nombres DocNum - Juan Perez 12345678 */ Como vemos ahora la informacion si aparece. Es muy importante mencionar que los certicados deben tener una copia de seguridad como la base de datos misma debido a que en el caso de que perdamos el certicado solo esa copia de seguridad nos podr asegurar la recuperacin de toda la data encriptada con ese certicado, caso contrario, la informacin permanecer perdida debido a que ya no se tiene el mismo certicado que la encript. Ahora veremos un ejemplo de cmo sacarle una copia de seguridad al certicado y simularemos la prdida del mismo y los distintos escenarios para la recuperacin de la informacin. USE SecureDB GO

3 de 6

10/05/2013 14:39

Encriptacin de datos en SQL Server Parte 2 | Memorias de un DBA

http://dbamemories.wordpress.com/2011/10/04/encriptacion-de-datos-...

-- Sacaremos una copia de seguridad del certificado BACKUP CERTIFICATE MiPrimerCertificado TO FILE = 'D:\DBAMemories \MiPrimerCertificado.cert' WITH PRIVATE KEY ( FILE = 'D:\DBAMemories\MiPrimerCertificado.key' , ENCRYPTION BY PASSWORD = 'pass' ); GO -- Ahora perderemos el certificado. DROP CERTIFICATE MiPrimerCertificado GO -- Podemos confirmar que nuestro certificado no esta y no podemos desencriptar nuestra informacion SELECT Nombres, CONVERT(VARCHAR(8),DECRYPTBYCERT(CERT_ID('MiPrimerCertificado'),DocNum)) AS DocNum FROM dbo.CertificateEncription /* Nombres DocNum ---------- -------------Juan Perez NULL */ -- Ahora que se puede hacer, bueno se puede pensar que -- si se crea nuevamente el certificado, todo funcionara nuevamente. Veamos -- Creamos el certificado CREATE CERTIFICATE MiPrimerCertificado WITH SUBJECT='DBAMemories Certificate', EXPIRY_DATE = '12/31/2012' GO -- Probamos desencriptar la informacion SELECT Nombres, CONVERT(VARCHAR(8),DECRYPTBYCERT(CERT_ID('MiPrimerCertificado'),DocNum)) AS DocNum FROM dbo.CertificateEncription /* Nombres DocNum ---------- -------------Juan Perez NULL */ ----Que paso? Por que no funciono? Debido a que el certificado que se uso no es el mismo que encripto la informacin, a pesar de que se creo el certificado con la misma sentencia

-- Volvemos a eliminar el certificado DROP CERTIFICATE MiPrimerCertificado GO -- Ahora restauramos el certificado desde nuestra copia de seguridad CREATE CERTIFICATE MiPrimerCertificado

4 de 6

10/05/2013 14:39

Encriptacin de datos en SQL Server Parte 2 | Memorias de un DBA

http://dbamemories.wordpress.com/2011/10/04/encriptacion-de-datos-...

FROM FILE = 'D:\DBAMemories\MiPrimerCertificado.cert' WITH PRIVATE KEY (FILE = 'D:\DBAMemories\MiPrimerCertificado.key', DECRYPTION BY PASSWORD = 'pass'); GO -- Finalmente volvemos a consultar la informacion SELECT Nombres, CONVERT(VARCHAR(8),DECRYPTBYCERT(CERT_ID('MiPrimerCertificado'),DocNum)) AS DocNum FROM dbo.CertificateEncription /* Nombres DocNum ---------- -------------Juan Perez 12345678 */ -- Y como podemos observar nuestra informacion volvio a estar disponible.

Escrito por dbamemories octubre 4, 2011 a 9:28 pm Escrito en Encriptacin, SQL Server Database, T-SQL Etiquetado con DECRYPTBYCERT, Encriptacin, ENCRYPTBYCERT

5 comentarios
Suscrbete a los comentarios mediante RSS. [...] hp://dbamemories.wordpress.com/2011/10/04/encriptacion-de-datos-en-sql-server%E2%80%93-parte-2/ October 5, 2011 // MsSQL // No Comments // [...] Encriptacin de datos en SQL Server Parte 2 DbRunas Noticias y Recursos sobre Bases de Datos octubre 5, 2011 a 2:48 pm

5 de 6

10/05/2013 14:39

Encriptacin de datos en SQL Server Parte 2 | Memorias de un DBA

http://dbamemories.wordpress.com/2011/10/04/encriptacion-de-datos-...

Responder [...] sobre la encriptacin de los datos de una manera mas informada. Si gustan pueden visitar la Parte 2 or la Parte 1 de los post relacionados con este tema. Ahora procederemos a explicar la [...] Encriptacin de datos en SQL Server Parte 3 Memorias de un DBA octubre 14, 2011 a 9:33 pm Responder me ayudo mucho para mi tarea drake jon vides vidu junio 29, 2012 a 12:45 pm Responder Me da gusto ser de ayuda. dbamemories julio 18, 2012 a 9:37 pm Responder Muy buen tutorial, muy til, muy prctico y muy claro, muchas gracias. Enrique Luna octubre 4, 2012 a 11:04 am Responder

Blog de WordPress.com. Tema The Journalist v1.9 por Lucian E. Marin.

6 de 6

10/05/2013 14:39

También podría gustarte