DataSunrise está patrocinando AWS re:Invent 2024 en Las Vegas, por favor visítenos en el stand #2158 de DataSunrise

Enmascaramiento de Datos Hecho por Ti Mismo

Enmascaramiento de Datos Hecho por Ti Mismo

Este artículo describe cómo crear una VISTA para visualizar datos despersonalizados. La solución descrita aquí se basa en una solución de este artículo (obteniendo una cadena aleatoria de la tabla).

El propósito principal del enmascaramiento de datos es ofuscar los datos reales y hacerlos irrecuperables. Pero no basta con solo ocultar los datos reales. Muy a menudo es necesario que se vean lo más realistas posible.

Tales requisitos surgen porque el enmascaramiento de datos se utiliza principalmente para pruebas de aplicaciones y los datos deben parecer lo más realistas posible. Y una buena solución para esto es usar los datos de la tabla real pero tomarlos de filas aleatorias.

Comencemos.

Usaré una tabla llamada “connections” como ejemplo. Esta tabla incluye las columnas “ID” y “client_port” que deben ser enmascaradas. Y la columna “ID” es la clave primaria de la tabla.

Dado que algunas filas podrían ser eliminadas y la ID no contiene un valor estrictamente consistente, vamos a crear una tabla con datos vinculados con el número de fila. Esencialmente, es la forma más rápida para que PostgreSQL seleccione datos por número de fila. Si estás usando una base de datos Oracle, puedes saltarte este paso.

create table client_port_ids
	    (
	    rowid serial PRIMARY KEY,
	    id integer
	    );
	-- llenando la tabla con números de ID existentes. la tabla debe llenarse antes del enmascaramiento
	INSERT INTO client_port_ids (id) SELECT id FROM connections ORDER BY id;

Ya que le gustaría que la base de datos mostrara los mismos valores en la fila enmascarada en cada consulta SELECT, es necesario crear una tabla para almacenar el enlace entre los datos reales y los de sustitución.

create table client_port_map
	    (
	    src integer PRIMARY KEY,
	     dst integer
	    );

Vamos a crear una función de enmascaramiento para comprobar si los datos enmascarados no se han obtenido antes. Y si estos datos están ausentes, la función toma los datos de una fila aleatoria.

CREATE OR REPLACE FUNCTION public.hide_client_port(
	val integer)
	RETURNS integer AS
	$BODY$
	DECLARE
	res integer;
	sed float;
	row_count integer;
	rand_row integer;
	BEGIN
	-- comprobar mapeo existente
	SELECT dst into res FROM client_port_map WHERE src = val;
	IF FOUND = FALSE THEN
	-- buscar cadena aleatoria
	select MAX(rowid) into row_count from client_port_ids;
	LOOP
	SELECT floor(random()*row_count) into rand_row;
	select client_port into res from connections where id = (select id from client_port_ids where rowid = rand_row);
	EXIT WHEN FOUND = TRUE;
	END LOOP;
	-- guardar nuevo valor en el mapeo
	INSERT INTO client_port_map VALUES (val, res);
	END IF;
	return res ;
	END;
	$BODY$
	LANGUAGE plpgsql VOLATILE

Veamos cómo se mezclan las entradas.

Dado que en este ejemplo usamos una tabla pequeña, algunas entradas sustituidas coinciden con las entradas reales. Eso es porque es imposible engañar a la teoría de la probabilidad.

¿Cómo se podría usar esto? Vamos a crear un nuevo esquema con una VISTA usando una tabla con datos reales. Y para la tabla “connections” creamos la siguiente VISTA:

CREATE OR REPLACE VIEW public.connection AS
	SELECT connections.partition_id,
	connections.id,
	connections.interface_id,
	connections.client_host,
	hide_client_port(connections.client_port) AS hide_client_port,
	connections.begin_time,
	connections.end_time,
	connections.client_host_name,
	connections.instance_id,
	connections.proxy_id,
	connections.sniffer_id
	FROM connections;

Como ves, es bastante fácil. Por supuesto, esta función puede mejorarse. Por ejemplo, podrías emplear un mecanismo para asignar diferentes valores a filas que contienen valores similares. Pero eso es un juego completamente nuevo.

Para enmascarar tus datos de manera profesional, puedes usar Dynamic Data Masking incluido en Data Sunrise Database Security Suite.

Siguiente

¿Cómo Instalar el Controlador ODBC de MySQL en Ubuntu 16.04?

¿Cómo Instalar el Controlador ODBC de MySQL en Ubuntu 16.04?

Más información

¿Necesita la ayuda de nuestro equipo de soporte?

Nuestros expertos estarán encantados de responder a sus preguntas.

Información general:
[email protected]
Servicio al Cliente y Soporte Técnico:
support.datasunrise.com
Consultas sobre Asociaciones y Alianzas:
[email protected]