Enmascaramiento de datos dinámicos (Dynamic Data Masking)
¿Qué es Dynamic Data Masking (DDM)?
Dynamic Data Masking (DDM) es una característica de SQL Server que permite ocultar datos confidenciales en tiempo real mediante la ofuscación de los datos a nivel de consulta. Esto significa que los datos sensibles pueden mostrarse de manera parcial o modificada para ciertos usuarios, mientras que los usuarios autorizados pueden ver los datos completos sin ninguna modificación.
Funcionalidad de DDM
DDM permite definir reglas de enmascaramiento en columnas específicas de una tabla. Cuando un usuario no autorizado ejecuta una consulta sobre esas columnas, SQL Server devuelve los datos enmascarados en lugar de los datos reales. Este proceso es transparente para las aplicaciones, ya que no requiere cambios en el código de la aplicación.
Tipos de Enmascaramiento
- Enmascaramiento Predeterminado (Default):
- Reemplaza los valores con un enmascaramiento predeterminado.
- Ejemplo:
xxxx@xxxx.com
para correos electrónicos.
- Enmascaramiento de Correo Electrónico (Email):
- Enmascara direcciones de correo electrónico manteniendo el formato de correo.
- Ejemplo:
xxx@domain.com
.
- Enmascaramiento Aleatorio (Random):
- Reemplaza el valor con un número aleatorio dentro de un rango especificado.
- Ejemplo: Números de tarjeta de crédito o identificadores.
- Enmascaramiento Personalizado (Custom String):
- Define un patrón de enmascaramiento personalizado.
- Ejemplo: Mostrar solo los últimos cuatro dígitos de un número de tarjeta de crédito.
Para mostrar cómo funciona la característica, vamos a crear una base de
datos con una tabla simple a la que insertaremos 10 filas.
CREATE database TestDataMasking
go
Use TestDataMasking
go
–Creacion de tabla
Create table dbo.Cliente
(Cliente_Codigo int,
Cliente_Nombre varchar(100),
Cliente_FechaInicio datetime,
Cliente_EMail varchar(100),
Cliente_TarjetaCredito Varchar(100)
)
go
— ingreso de datos de ejemplo
Insert into dbo.Cliente values(101,‘Visoalgt’,‘2016-08-11 00:34:51:090’,‘YoshiTannamuri@visoalgt.com’,‘9135-5555-8798’)
Insert into dbo.Cliente values(102,‘Cardenas Corp’,‘2016-01-08 19:44:51:090’,‘DanielTonini@cardenas.com’,‘1555-9857-8709’)
Insert into dbo.Cliente values(103,‘Alfreds Futterkiste’,‘2015-08-19 19:44:51:090’,‘PhilipCramer@futterkiste.com’,‘7675-3425-3433’)
Insert into dbo.Cliente values(104,‘Antonio Moreno Taquería’,‘2014-08-19 19:44:51:090’,‘PatriciaMcKenna@tqueria.com’,‘5535-0297-6523’)
Insert into dbo.Cliente values(105,‘Around the Horn’,‘2014-08-04 19:44:51:090’,‘YoshiLatimer@araound.com’,‘1354-2534-4534’)
Insert into dbo.Cliente values(106,‘Berglunds snabbköp’,‘2015-08-10 19:44:51:090’,‘chbrancar@beglunds.com’,‘5203-4560-5455’)
Insert into dbo.Cliente values(107,‘Bs Beverages’,‘2015-04-17 19:44:51:090’,‘SimonCrowther@beverages’,‘555-9482-3587’)
Insert into dbo.Cliente values(108,‘Bólido Comidas preparadasCable VGA’,‘2015-08-21 19:44:51:090’,‘FelipeIzquierdo@bolido.com’,‘555-7555-4545’)
Insert into dbo.Cliente values(109,‘X enterprice’,‘2015-08-06 19:44:51:090’,‘CarlosGonzalez@xenterprice.com’,‘2833-2951-4544’)
Insert into dbo.Cliente values(110,‘Chop-suey Chinese’,‘2015-08-26 19:44:51:090’,‘JohnSteel@chop.com’,‘5535-1340-3453’)
go
—Consultar la tabla solo para revisión.
Select * from Cliente
proteger la privacidad de los datos de los usuarios normales.
— Se mostraran los dos primeros caracteres y el ultimo carácter del nombre
ALTER TABLE dbo.Cliente ALTER COLUMN Cliente_Nombre ADD MASKED WITH (FUNCTION = ‘partial(2,»XXXXXXXX», 1)’);
— Todas las direcciones de correo se mostraran nXXX@XXXX.com
ALTER TABLE dbo.Cliente ALTER COLUMN Cliente_Email ADD MASKED WITH (FUNCTION = ‘email()’);
— Se mostrará el dato de la siguiente manera nXXX-XXXX-XXXXn
ALTER TABLE dbo.Cliente ALTER COLUMN Cliente_TarjetaCredito ADD MASKED WITH (FUNCTION = ‘partial(1,»XXXX-XXXX-XXXXX»,1)’);
— Todas las fechas las mostrara como 1900-01-01
ALTER TABLE dbo.Cliente ALTER COLUMN Cliente_FechaInicio ADD MASKED WITH (FUNCTION = ‘default()’);
Para un administrador de sistemas o db_owner, no hay enmascaramiento
aplicado en absoluto, pero para un usuario con los privilegios más básicos al
momento de efectuar la consulta a la tabla los datos se enmascararán, a menos
que conceda el permiso de UNMASK al usuario.
–creación de usuarios para prueba
Create user VICTOR without login;
–asignación de permisos a los usuarios de prueba
GRANT SELECT ON dbo.Cliente to VICTOR;
–Ejecución de una consulta en nombre del usuario recién creado
Execute (‘SELECT * FROM DBO.Cliente’) as user=‘VICTOR’;
go
No se puede definir una regla de enmascaramiento para los siguientes tipos de columnas:
· Columnas cifradas (siempre cifradas)
· FILESTREAM
· COLUMN_SET o una columna dispersa que forme parte de
un conjunto de columnas.
· No se puede configurar una máscara en una columna
calculada, pero si esta última depende de otra con una máscara, entonces la
columna calculada devolverá datos enmascarados.
· Una columna con enmascaramiento de datos no puede ser
una clave para un índice FULLTEXT.
Modificar o eliminar un enmascaramiento.
–Modificar una mascara
ALTER TABLE dbo.Cliente ALTER COLUMN Cliente_TarjetaCredito ADD MASKED WITH (FUNCTION = ‘partial(0,»XXXX-XXXX-XXXXX»,4)’);
–Consultar
Select * from dbo.Cliente
–Eliminar una Mascara
ALTER TABLE dbo.Cliente ALTER COLUMN Cliente_TarjetaCredito DROP MASKED;