# MANUALE DI INSTALLAZIONE E UTILIZZO DESENSIBILIZZATORE HIVE
___
>Il presente documento è stato redatto in coerenza con il Codice Etico e i Principi Generali del Controllo Interno
___
Compilato: Engineering
Versione: 0.1
___
>VERSIONI
___
|versione|causale |compilato da|verificato da|approvato da|data |
|--- |--- |--- |--- |--- | --- |
|0.1 |Prima Emissione|Engineering | | |03/12/2021|
## Indice
1. [Indice](#Indice)
2. [Introduzione](#Introduzione)
3. [Installazione software](#Installazione-software)
4. [Utilizzo software](#Utilizzo-software)
4.1 [Use Case 1 Consensi C2](#Use-Case-11---Consensi-C2)
4.2 [Use Case 1 Consensi C2](#Use-Case-12---Consensi-C2-con-coalescenza)
4.3 [Use Case 2 OLO](#Use-Case-12---Consensi-C2-con-coalescenza)
4.4 [Use Case 3 Personas](#Use-Case-3---Personas)
5. [Sviluppi futuri](#Sviluppi-futuri)
## Introduzione
Nel documento sono descritte le istruzioni per installare e avviare il software di Desensibilizzazione. La procedura in questione esegue desensibilizzazione dei campi per l'entità scelta per una data partizione. Questa può avvenire, per i campi scelti, in maniera indiscriminata o sulla base di controlli dei consensi in tabelle ausiliare o della presenza di eventuali record in esse. La desensibilizzazione può avvenire tramite pseudonimizzazione (hashing), anonimizzazione (blanking) dei campi selezionati oppure tramite filtraggio delle righe della tabella di input.
## Installazione software
Il pacchetto software deve essere estratto ed opportunamente posizionato in una directory con permessi di lettura, mantenendo la struttura delle cartelle intatta.
Verificare la presenza dei file per la configurazione globale dei parametri delle variabili d'ambiente in`/data/conf/config.json` (*tools4param*). Nello specifico vengono utilizzate le seguenti chiavi per il contesto _PROD_.
* _LOGUSER_
* _LOG_PASSWD_
* _LOG_HOST_
* _LOG_PORT_
* _LOG_SID_
* _ORA_USER_
* _ORA_PASSWD_
* _ORA_HOST_
* _ORA_PORT_
* _ORA_SID_
## Utilizzo software
Per avviare la procedura spostarsi nella directory principale ed eseguire lo script _wrapper.sh_ su un edge node del cluster, come da esempi riportati nelle sezioni relative agli use cases.
```shell
cd data/apps/dlp_desensibilizzatore
./wrapper.sh
```
I parametri dello script _wrapper.sh_ per l'esecuzione della procedura sono i seguenti:
- _input_db_: Database Hive contenente la tabella di input
- _input_table_: Tabella sulla quale applicare la desensibilizzazione
- _input_cols_: Colonne della tabella di input sulle quale applicare la desensibilizzazione. Separare le colonne con la virgola
- _input_anon_types_: Tipologia, per ogni colonna di input, dell'algoritmo da usare. Anche essi sono separati da virgola. Valori ammessi:
- BLANK: Anonimizzazione del campo tramite blanking
- ANON: Anonimizzazione tramite hashing
- FILTER: Filtraggio delle righe della tabella
- BLANK_ONCONS: Anonimizzazione del campo tramite blanking, dopo aver effettuato presenza del consenso o del record nelle tabelle ausiliare
- ANON_ONCONS: Anonimizzazione del campo tramite hashing, dopo aver effettuato presenza del consenso o del record nelle tabelle ausiliare
- _aux_db_: Database Hive contenenti eventuali tabelle ausiliarie
- _aux_tables_: Tabelle ausiliarie per effettuare controlli
- _cons_col_: Eventuale colonna contentente i consensi da controllare nella tabella ausiliaria
- _input_join_col_: Colonna della tabella di input (left table) da mettere in join con quelle delle tabelle ausiliarie
- _aux_join_cols_: Colonne delle tabelle ausiliarie (right tables) da mettere in join con quella della tabella di input
- _output_db_: Database sul quale memorizzare la tabella di output a valle della desensibilizzazione
- _output_table_: Tabella desensibilizzata di output
- _partition_col_: Colonna contenente la partizione
- _partition_date_: Data della partizione della tabella da utilizzare per applicare la desensibilizzazione
---
I parametri obbligatori sono:
_input_db_, _input_table_, _input_cols_, _input_anon_types_, _output_db_, _partition_date_
NB:
* Se _output_table_ non è presente la tabella di output verrà rinominata come "<input_table>__anon_".
_partition_col_ di default è "partition_date"
* Se non è presente una tabella ausiliaria verranno desensibilizzati i campi di input senza condizione.
* Se è presente _cons_col_ la condizione sarà applicati sui consensi contentuti nella tabella ausiliaria altrimenti si procederà a controllare la presenza dei campi di _input_join_col_ nelle tabelle ausiliartie nei campi _aux_join_cols_
---
Il software provvederà a loggare automaticamente le informazioni riguardanto l'esecuzione nella tabella _PSEUDO_LOG_TABLE_.
### Use Case 1.1 - Consensi C2
Tale use case permette di anonimizzare dei campi (_input_cols_) della tabella di input sulla base dei consensi contenuti in una tabella ausiliaria (_aux_tables_) nel campo _cons_col_. Nel caso in cui il consenso sia != da c2 i campi di input verranno anonimizzati usando l'algoritmo specificato nel campo _input_cols_
```shell
./wrapper.sh --input_db tdata --input_table CO_F_IVR_DET_NAV187_G \
--input_cols codice_cf \
--input_anon_types ANON_ONCONS \
--aux_db dwh_consenso --aux_tables DWC_VARIAZIONI_CONSENSO_MULTIMEDIA \
--cons_col consenso_c2 --input_join_col codice_cli --aux_join_cols cli \
--output_db tdata \
--partition_date 2021-10-21
```
#### Use Case 1.2 - Consensi C2 con coalescenza
Tale use case è simile al precedente ma contiene un'unica tabella ausiliaria e più colonne ausiliarie (_aux_join_cols_). In tal caso le colonne verranno unite tramite coalescenza e la colonna risultante verrà usata per il join con la tabella di input.
```shell
./wrapper.sh --input_db tdata --input_table CO_F_IVR_DET_NAV187_G \
--input_cols codice_cf \
--input_anon_types BLANK_ONCONS \
--aux_db dwh_consenso --aux_tables DWC_VARIAZIONI_CONSENSO_MULTIMEDIA \
--cons_col consenso_c2 --input_join_col codice_cli \
--aux_join_cols cli,msisdn_1 \
--output_db tdata --output_table CO_F_IVR_DET_NAV187_BLK_G \
--partition_date 2021-10-21
```
### Use Case 2 - OLO
Tale use case consente di verificare che un campo della tabella di input (_input_join_col_) sia contenuto nelle tabelle ausiliarie rispettivamente nei campi indicati nel parametro _aux_join_cols_. In caso negativo, alle colonne di input (_input-cols_) verrà applicato il corrispondente algoritmo di desensibilizzazione (_input_anon_types_).
```shell
./wrapper.sh --input_db tdata --input_table CO_F_IVR_DET_NAV187_G \
--input_cols codice_cli \
--input_anon_types BLANK_ONCONS \
--aux_db tdata --aux_tables CO_M_LIN_DEN_ANG_G,CO_F_LIN_DEN_ANG_G \
--input_join_col codice_cli --aux_join_cols msisdn,num_telefono \
--output_db tdata \
--output_table CO_F_IVR_DET_NAV187_BLK_G \
--partition_date 2021-10-21
```
### Use Case 3 - Personas
Tale use case permette di anonimizzare i campi _input_cols_ nelle modalità scelte in _input_anon_types_ per tutte le righe di _input_table_.
```shell
./wrapper.sh --input_db bitdc_prep --input_table dati_dett \
--input_cols msisdn,uplink,ncausachiusura0nm \
--input_anon_types BLANK,ANON,BLANK \
--output_db tdata \
--partition_date 2021-01-01
```
## Sviluppi futuri
Per la release successiva del software sono previste le seguenti features:
* Logging nella tabella _PROC_REALTIME_
* Configurazione della procedura da catalogo
* Censimento nel catalogo automatizzato delle tabelle di output