DataSunrise Consegue la Certificazione AWS DevOps Competency per AWS DevSecOps e Monitoraggio, Logging e Performance

Mascheramento dei Dati Fai Da Te

Mascheramento dei Dati Fai Da Te

Questo articolo descrive come creare una VIEW per visualizzare dati depersonalizzati. La soluzione descritta qui si basa su una soluzione tratta da questo articolo (ottenere una stringa casuale dalla tabella).

Lo scopo principale del mascheramento dei dati è quello di offuscare i dati reali e renderli irrecuperabili. Ma non è sufficiente nascondere semplicemente i dati reali. Molto spesso è necessario che appaiano il più realistici possibile.

Tali requisiti emergono perché il mascheramento dei dati è utilizzato prevalentemente per testare applicazioni e i dati devono apparire il più realistici possibile. Una buona soluzione per questo è utilizzare i dati della tabella effettiva ma prelevarli da righe casuali.

Iniziamo.

Utilizzerò come esempio una tabella chiamata “connections”. Questa tabella include colonne “ID” e “client_port” che dovrebbero essere mascherate. E la colonna “ID” è la chiave primaria della tabella.

Poiché alcune righe potrebbero essere cancellate e l’ID non contiene un valore strettamente coerente, creiamo una tabella con dati collegati al numero di riga. Essenzialmente, è il modo più rapido per PostgreSQL di selezionare i dati in base al numero di riga. Se si utilizza Oracle database, si può saltare questo passaggio.

create table client_port_ids
	    (
	    rowid serial PRIMARY KEY,
	    id integer
	    );
	-- riempire la tabella con numeri di id esistenti. la tabella deve essere riempita prima del mascheramento
	INSERT INTO client_port_ids (id ) SELECT id FROM connections ORDER BY id;

Poiché Lei desidera che il database mostri gli stessi valori nella riga mascherata ad ogni query SELECT, è necessario creare una tabella per memorizzare il collegamento tra i dati reali e quelli sostituiti.

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

Creiamo una funzione di mascheramento per verificare se i dati mascherati non sono stati prelevati prima. E se questi dati sono assenti, la funzione prende i dati da una riga casuale.

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
	--verifica della mappatura esistente
	SELECT dst into res FROM client_port_map WHERE src = val;
	IF FOUND = FALSE THEN
	--ricerca di una stringa casuale
	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;
	--salvataggio del nuovo valore nella mappatura
	INSERT INTO client_port_map VALUES (val, res);
	END IF;
	return res ;
	END;
	$BODY$
	LANGUAGE plpgsql VOLATILE

Vediamo come vengono mescolate le voci.

Poiché in questo esempio utilizziamo una tabella piccola, alcune voci sostituite corrispondono a quelle reali. Questo perché è impossibile ingannare la teoria della probabilità.

Come potrebbe essere utilizzato questo? Creiamo un nuovo schema con una VIEW utilizzando una tabella con dati reali. E per la tabella “connections” creiamo la seguente VIEW:

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;

Come si vede, è abbastanza semplice. Ovviamente, questa funzione può essere migliorata. Ad esempio, si potrebbe impiegare un meccanismo per assegnare valori differenti a righe che contengono valori simili. Ma questo è un altro discorso.

Per mascherare i tuoi dati professionalmente, puoi utilizzare il Mascheramento Dinamico dei Dati incluso nel Data Sunrise Database Security Suite.

Successivo

Come Installare il Driver ODBC MySQL su Ubuntu 16.04?

Come Installare il Driver ODBC MySQL su Ubuntu 16.04?

Scopri di più

Ha bisogno del nostro team di supporto?

I nostri esperti saranno lieti di rispondere alle Sue domande.

Informazioni generali:
[email protected]
Servizio clienti e supporto tecnico:
support.datasunrise.com
Richieste di collaborazione e alleanza:
[email protected]