Enmascaramiento dinámico de datos en SQL Server

Hola Amigos! En la entrada de hoy vamos a ver el enmascaramiento dinámico de datos (DDM) que limita la exposición de información confidencial al ocultarla a los usuarios sin privilegios. Se puede usar para simplificar considerablemente el diseño y la codificación de la seguridad en la aplicación.

Definición de una máscara dinámica de datos

Es posible definir una regla de enmascaramiento en una columna de una tabla, con el objetivo de ofuscar los datos de esa columna. Existen cuatro tipos de máscaras.

Valor predeterminado Enmascaramiento completo de acuerdo con los tipos de datos de los campos designados.

Para los tipos de datos String, use XXXX o un número menor de X si el tamaño del campo es inferior a 4 caracteres ( char , nchar , varchar , nvarchar , text , ntext ).

Para los tipos de datos numéricos, use un valor cero ( bigint , bit , decimal , int , money , numeric , smallint , smallmoney , tinyint , float , real ).

En el caso de los tipos de datos de fecha y hora, use 01.01.1900 00:00:00.0000000 ( date , datetime2 , datetime , datetimeoffset , smalldatetime , time ).

En lo que respecta a los tipos de datos binarios, use un solo byte de valor 0 de ASCII ( binary , varbinary , image ).
Email Método de enmascaramiento que expone la primera letra de una dirección de correo electrónico y el sufijo constante «.com», en el formato de una dirección de correo electrónico. aXXX@XXXX.com.
Random Una función de enmascaramiento aleatorio que se puede usar con cualquier tipo numérico a fin de enmascarar el valor original con uno aleatorio dentro de un intervalo especificado.
Cadena personalizada Método de enmascaramiento que expone la primera y última letra y agrega una cadena de relleno personalizada en el medio. prefix,[padding],suffix

Nota: Si el valor original es demasiado corto como para que se complete toda la máscara, no se expondrá parte del prefijo o sufijo.

Procedimientos recomendados y casos de uso habituales

Realización de consultas en columnas enmascaradas

  • La creación de una máscara en una columna no impide que se efectúen actualizaciones en ella. 
  • Si se utiliza SELECT INTO o INSERT INTO para copiar datos de una columna enmascarada en otra tabla, se generarán datos enmascarados en la tabla de destino.
  • Se aplica el enmascaramiento dinámico de datos al ejecutar la importación y exportación de SQL Server . 

Realización de consultas en columnas enmascaradas

Para ver qué tablas tienen columnas enmascaradas utilizaremos la siguiente query.

SELECT c.name, tbl.name as table_name, c.is_masked, c.masking_function  
 FROM sys.masked_columns AS c  
 JOIN sys.tables AS tbl   
     ON c.[object_id] = tbl.[object_id]  
 WHERE is_masked = 1;   

Caso Práctico de enmascaramiento dinámico de datos:

En primer lugar, crearemos la tabla de la siguiente manera:

 CREATE TABLE Membership  
   (MemberID int IDENTITY PRIMARY KEY,  
    FirstName varchar(100) MASKED WITH (FUNCTION = 'partial(1,"XXXXXXX",0)') NULL,  
    LastName varchar(100) NOT NULL,  
    Phone varchar(12) MASKED WITH (FUNCTION = 'default()') NULL,  
    Email varchar(100) MASKED WITH (FUNCTION = 'email()') NULL);  
 INSERT Membership (FirstName, LastName, Phone, Email) VALUES   
 ('Roberto', 'Tamburello', '555.123.4567', 'RTamburello@contoso.com'),  
 ('Janice', 'Galvin', '555.123.4568', 'JGalvin@contoso.com.co'),  
 ('Zheng', 'Mu', '555.123.4569', 'ZMu@contoso.net');  
 SELECT * FROM Membership;   

Ahora creamos un usuario con permisos de SELECT sobre la tabla y volvemos a ejecutar la consulta.

enmascaramiento de datos umask gpsos

Vemos que el usuario no puede leer los datos que hemos enmascarado, para poder verlos tendremos que dar el permisos “UMASK” al usuario:

GRANT UNMASK TO "USUARIO";  

Si volvemos a ejecutar la consulta vemos que ya si vemos los datos.

enmascaramiento de datos umask gpsos

Más información en https://docs.microsoft.com/es-es/sql/relational-databases/security/dynamic-data-masking?view=sql-server-ver15

Si necesitas ayuda con este u otro tema de SQL Server, no dudes en contactar con nosotros! Nos vemos en la próxima !!