miércoles, 1 de marzo de 2017

99. SQL 2016 Dia 1 - SQL Server Always Encripted

Como arquitecto, uno siempre debe tener la visión de todos los elementos que interactúan en un sistema, como desarrollador uno debe saber emplear las mejores características que nos otorgan estos elementos para poder llegar a las mejores soluciones, NO ES VALIDO DECIR YO SOLO PROGRAMO Y NO SE OTRA COSA, este programador no me sirve, por que no sabe interactuar con su entorno.

Así, un desarrollador siempre debe estar aprendiendo, tenemos SQL 2016, recién salido del horno, este trae una serie de nuevas características, es importante que las conozcamos, para poder explotarlas, siempre es bueno tener las ultimas versiones, por que estas forman parte de un proceso evolutivo, en el que se tiene mejor rendimiento y seguridad, pero a la vez es necesario saberlas explotar.

Always Encripted es una herramienta muy útil que trae consigo SQL 2016 y .NET 4.6 (requisitos minimos), su uso es que nos permite tener datos permanentemente encriptados en la base de datos (sin posibilidad de modificarlos directamente a menos de que tengamos el certificado digital con el que se encriptaron), de tal forma que los datos solo están disponibles para aquellas personas que tengan el certificado digital en sus equipos.

Si los administradores de base de datos no tienen dichos certificados, no podrán ver la información, aunque tengan el nivel mas alto de privilegios.

Esto genera verdaderos dueños de la información, y verdaderos administradores de Base de datos.

¿Qué pasa si se roban la base de datos?

Si se roban la base de datos, la información estará encriptada, para recuperarla es necesario tener el acceso al certificado digital.

Y lo mejor de todo, es que SQL y .NET se encargan del proceso de cifrado, por parte del administrador de base de datos, solo es necesario configurar la tabla, por parte de desarrollo, solo es necesario instalar un certificado y configurar la cadena de conexión para que tenga este nuevo parámetro.

Pasemos al ejemplo

1. Creemos una base de datos


Consideremos que deseamos encriptar algún campo de la tabla usuario


digamos el campo clave

Con el botón derecho del mouse nos situamos sobre la base de datos, para obtener un menú contextual


Seleccionemos encriptar columnas

Este nos traerá una pantalla para seleccionar lo que deseamos hacer


Seleccionemos las columnas a encriptar


Seleccionemos nuestro certificado (para el caso de este ejemplo dejaremos que sql genere uno, dentro del almacén de Windows, pero podemos o debemos usar certificados propios para tener realmente la característica de seguridad)


Ejecutamos el proceso



Y tenemos ya el campo encriptado



Nuestra consola no esta configurada para hacer uso del certificado por lo que no estamos capacitados para insertar en la base de datos de forma directa.


Dentro de la carpeta de seguridad en always Encripted key es en donde se guarda la configuración de nuestros certificados, y es aquí en donde se puede configurar un certificado no auto generado.


Ahora carguemos un registro desde una aplicación .NET





Es muy importante que la versión de .NET sea 4.6 o superior





Veamos este fragmento de código, tiene una diferencia en la cadena de conexión, esta es Column Encryption Setting=enabled, esta es la que hace la magia.

Otra cosa importante a considerar es que los valores se deben pasar como parámetros para que .NET sepa cual sustituir.

Ejecutemos la aplicación y consultemos en base de datos.



Para el DBA los datos se mostraran encriptados puesto que el no es dueño de la aplicación.

Consultando los datos desde .NET


El código que se empleo para consultar fue:


Felices lineas



No hay comentarios.:

Publicar un comentario