Todos las empresas quieren proteger sus datos de terceros, e incluso de sus propios trabajadores. Lo que muchos "jefes" no tienen tan claro es que siempre hay dos niveles de protección... uno físico y uno lógico. De nada sirve poner un sistema de seguridad por software de ultima generación y "super seguro" si cualquiera tiene acceso al disco físico donde se almacenan los datos. Como respuesta a la pregunta, si alguien se lleva mi base de datos, ¿puede acceder a los datos?. La respuesta siempre es SI. Lo único que podemos hacer es ponerlo más difícil.
Por tanto, desde mi punto de vista, lo más importante es tener un sitio seguro donde almacenar los datos y que físicamente tan sólo personal autorizado puede acceder a ellos. Además hay que complementar esto con una buena seguridad por software que nos evite el máximo número de ataques posible. ¿y si todo esto falla? la solución pasa por encriptar parte o la totalidad de nuestra base de datos, que si bien no es infalible, nuevamente complicamos un poco mas las cosas a "los malos".
Hay varias formas de encriptar una base de datos de SQL Server 2008, una de las más sencillas es la siguiente. Encriptar los campos de las tablas que no queramos que nadie conozca con una clave. Está claro que si perdemos la clave... nos resultará un poco complicado obtener nosotros mismos esos datos, pero como siempre, por "fuerza bruta" se pueden obtener. Por esto decimos, que lo único que conseguiremos es complicar un poco mas las cosas a "los malos". En próximas entradas hablaré de otros métodos de encriptación de las bases de datos de SQL Server 2008. Es importante saber también que este método de encriptación esta disponible en la versión Express.
Un ejemplo:
01 create database DBConClave 02 03 GO 04 05 use DBConClave 06 07 GO 08 09 create table Clientes 10 ( 11 id integer identity primary key, 12 nombre varchar(100), 13 apellidos varchar(200), 14 cif varchar(20), 15 ccc VARBINARY(8000) -- este es el campo que vamos a cifrar. 16 ) 17 18 GO 19 20 -- insertamos un registro con clave 21 -- es la menor protección pero también la que requiere menos recursos 22 INSERT INTO Clientes (nombre, apellidos, cif, ccc) 23 VALUES ('Sandra', 'Matos', '1231231',ENCRYPTBYPASSPHRASE('mipassword','123132131321')) --mispassword es la clave de cifrado 24 25 GO 26 27 --si hacemos un select normal no podemos obtener el ccc 28 SELECT * FROM CLientes 29 30 31 --para poder obtener el ccc del cliente deberíamos pasarle también la clave. 32 SELECT nombre, apellidos, cif, CONVERT(VARCHAR(300), 33 DECRYPTBYPASSPHRASE('mispassword',ccc)) as ccc 34 FROM Clientes
No hay comentarios:
Publicar un comentario