Skip to content

Cómo enmascarar datos en SQL Server

Proteger nuestra información es una premisa sobretodo para los que trabajamos como administradores de servidores. Seguramente ya viste nuestra publicación sobre Qué significa ser DBA, y verás que la seguridad no es un tema aparte en su trabajo. El enmascaramiento es una buena metodología para cuidar datos sensibles, por eso veremos cómo enmascarar datos en SQL Server.


Antes de empezar

He visto muchas veces que los conceptos se mezclan y debemos estar conscientes de las diferencias.

Encriptar != Enmascarar

¿Está bien?


Entonces, ¿cómo funciona?

Literalmente, enmascarar es generar una capa de protección, cubrir, disimular (solamente).

Mostrar algo que no es realmente.

enmascarar-datos-en-sql-server

El enmascaramiento en SQL Server puede ser de mucha ayuda y lo utilizaremos a través de una tecnología que se ha denominado Dynamic Data Masking.

Así limitamos la exposición de datos sensibles a usuarios no privilegiados.


¿Dónde aplicamos enmascaramiento de datos?

Podemos pensar en diferentes escenarios

  • Ambientes de Desarrollo o Testing
  • Call centers con aplicaciones de accesos limitados a datos
  • Algunos DBAs con accesos limitados
  • Operadores de Base de Datos con tareas limitadas
  • Personal externo que trabaja con nuestras Bases de Datos

Vamos a nuestro código

Verás que en SQL Server no es nada más que aplicar alguna sintaxis extra en la creación de las tablas que requerimos enmascarar. Esto lo haremos sobre las columnas que creemos tienen información sensible.

Existen 4 funciones básicas de enmascaramiento. Pero queremos ver el código, ¿verdad?

--	Create table appliying masking functions
CREATE TABLE UserInfo
(id int identity(1,1),
FirstName varchar(15),
LastName varchar(15) MASKED WITH (FUNCTION = 'default()'),
CreditCard varchar (25) MASKED WITH (FUNCTION = 'partial(4,"XXXXXXX",0)'),
Email varchar(25) MASKED WITH (FUNCTION = 'email()'),
DocNumber bigint MASKED WITH (FUNCTION = 'random(111111, 999999)')
)

INSERT INTO UserInfo 
(FirstName, LastName, CreditCard, Email, DocNumber) 
VALUES
('Pablo', 'Fernandez', '4940-9898-8989-1234','pablof@datoptim.com',123581321)


SELECT *
FROM UserInfo;


--	Run simulating a different user connection
--	nonAdminUser only have datareader role
EXECUTE AS USER = 'nonAdminUser';  
SELECT * 
FROM UserInfo;  
REVERT;  

Y la magia está hecha.

No necesitamos más código ni mayor complicación. El usuario denominado ‘nonAdminUser‘ mira los datos cambiados, enmascarados u aleatorios (dependiendo de la función aplicada) utilizando el mismo SELECT en la tabla.


Funciones para enmascarar datos en SQL Server

FunciónDescripción
DefaultDependemos del tipo de dato en la columna. En tipos texto se usan 'XXXX', en numéricos el '0' y en fechas '01.01.1900 00:00:00.0000000'
EmailSe mostrará solamente la primera letra del correo y se generaliza el @.com
RandomDiseñado para valores numéricos aleatorios en un rango determinado por random([inicio], [fin])
CustomSe mostrará los primeros caracteres y los últimos, enmascarando lo que queda en medio de acuerdo con la función partial(prefijo,[enmascara],sufijo)

Últimas consideraciones

No olvides nunca que enmascarar no es darle 100% de protección a tu información. Textualmente solo estás dando una máscara a la información, el dato como tal, sigue almacenado como es.

¿Qué protegemos? Es vital que primero puedas Encontrar tu información confidencial y clasificarla en tus Bases de Datos.

Si estamos protegiendo información, no está demás que tengamos un registro o monitoreo de quién está accediendo a las tablas con información sensible

Como también nos importa la nube, también puedes ver Cómo enmascarar datos en Azure SQL Database.

Si quieres enterarte de más detalles sobre Dynamic Data Masking y sus limitaciones suscríbete a nuestra página en este enlace para que te notifiquemos sobre nuevas publicaciones.

www.datoptim.com
I love working on SQL Server Performance Tuning and finding the origin of the problems. Music and SQL Server passionate.

Carrito
Volver arriba