Enmascarado dinámico de datos con SQL Server 2016

1-25-16-engineering-post-image1-dynamic-data-masking-reger-ronitBuenas noticias! Ahora SQL Server 2016, así como Azure SQL Database V12 traen una nueva característica que simplifica el manejo de información sensible

Atrás quedaron los días en los que teníamos que programar procedimientos y funciones que alteraban y enmascaraban los datos. Esto se hacía normalmente cuando pasamos información desde producción hacia QA o desarrollo para hacer pruebas con datos reales. Hay un buen libro digital gratuito (en ingles) sobre seguridad con SQL Server, escrito por John Magnabosco, que orienta al respecto y lo pueden bajar desde este link: Protecting SQL Server Data

Otro problema se da cuando queremos ocultar cierta información directamente en los ambientes de producción. Allí había que implementar funciones para criptografía, como ENCRYPTBYKEY y DECRYPTBYKEY, las cuales implicaban hacer cambios en el código, probar e implementar

Entonces, la nueva funcionalidad de enmascarado se implementa al momento de crear una tabla. Para cada campo que queremos enmascarar se utiliza la sentencia MASKED WITH. Junto con dicha sentencia hay que utilizar una función. Tenemos 4 funciones a disposición:

  • Default.- Enmascarado total de acuerdo con los tipos de datos de los campos designados. Muestra el valor mínimo posible según el tipo de dato
  • Email.- Muestra la primera letra del correo electrónico y el sufijo “.com”
  • Aleatorio (random).-Para datos numéricos; muestra un valor aleatorio entre un rango mínimo y máximo
  • Personalizado (partial).-Para datos caracter; muestra la primera y última letra y en el medio un caracter personalizado

A continuación, un ejemplo de como implementar el enmascarado nativo, utilizando cada una de las funciones descritas en el párrafo anterior:

NOTA: si la tabla ya existe se utilizan el comando ALTER TABLE …ALTER COLUMN para incluir el enmascarado

Una vez creada la tabla, insertamos registros de prueba

De aquí en adelante, el enmascarado de los datos va a depender del nivel de seguridad del usuario que realiza la consulta. Si el usuario tiene privilegio de db_owner, podrá ver los datos sin problemas:

DDM 1b

Pero si el usuario no es db_owner, visualizará los datos enmascarados. Vamos a crear un usuario para probar el enmascarado de datos , otorgándole únicamente permiso de lectura a la tabla de prueba creada en los pasos previos

Ahora procedemos a consultar los datos con el usuario creado.  Para simplificar la prueba usamos impersonación con el comando EXECUTE AS

DDM 2b

Obsérvese como los datos se muestran enmascarados, según la definición al momento de crear la tabla.

  • El campo Dirección fue enmascarado con una función partial; muestra la primera letra seguida del caracter “?”
  • El campo FlagDeConfianza fue encriptado con la función default; muestra el menor valor posible para el tipo de dato
  • El campo Email fue encriptado con la función Emal, muestra la primera letra seguida X y el sufijo “.com”
  • El campo FechaUltimoAscenso fue encriptado con la función default; muestra el menor valor posible para el tipo de dato
  • El campo Salario fue encriptado con la función default; muestra el menor valor posible para el tipo de dato
  • El campo Bono fue encriptado con la función random; muestra un valor aleatorio con un rango de 10 a 100

También podemos otorgar privilegios a un usuario que no es db_owner para que pueda ver los datos sin la máscara, a través del permiso UNMASK:

Con esto el usuario podrá ver los datos originales al momento de hacer las consultas. Si queremos que nuevamente enmascare los datos revocamos el permiso otorgado en el paso previo:

Un tema muy importante es que esto no se trata de encriptación o cifrado de datos, Es solo una máscara para visualización. El dato original no es alterado. Entonces, si el usuario tiene acceso apara consultas directas a la base de datos podría hacer esto:

DDM 3b

Mediante un predicado, el usuario ha filtrado el dato de salario en base a un rango. De esa forma puede ver el nombre del empleado y conocer que su salario está entre 2,500 y 3,000, aunque los datos se muestren enmascarados

Deja un comentario

Tu dirección de correo electrónico no será publicada.