Sicurezza a livello di riga (RLS) nel tableau

Al giorno d’oggi, molte organizzazioni affrontano problemi come la perdita di informazioni riservate e problemi di gestione del tempo. Se lavori in Tableau, i problemi sopra menzionati possono essere risolti (almeno in parte) visualizzando solo i dati che l’utente dovrebbe vedere, quindi l’utente non sarà distratto da informazioni irrilevanti o informazioni che non dovrebbero essere mostrate. Tableau non gestisce il filtraggio dei dati per un singolo utente utilizzando le autorizzazioni, che influiscono solo sul contenuto di Tableau Server che un utente può vedere. Pertanto, per imporre i diritti dei dati basati sugli utenti in Tableau è necessario utilizzare la sicurezza a livello di riga.

Tutte le tecniche di sicurezza per ottenere la sicurezza a livello di riga in Tableau dipendono dal fatto che ciascun utente abbia un nome utente distinto in Tableau Server e che l’utente abbia effettuato l’accesso come tale nome utente.

Principi principali di RLS

Quindi, diamo un’occhiata alle condizioni di base per la creazione di un RLS affidabile :

1. Tutti gli utenti e i gruppi necessari vengono creati in Tableau Server;

2. Devi essere connesso a Tableau Server o Tableau Online perché il desktop deve scaricare l’elenco di utenti e gruppi dal server;

3. Filtro utente a livello di origine dati (in base all’ordine di filtro in Tableau il filtro di origine viene applicato nel primo ordine)

Le origini dati incorporate consentono a un utente finale con Modifica Web o Download di modificare i campi calcolati. Pertanto, le origini dati incorporate sono meno sicure e dovrebbero essere utilizzate solo se Modifica / Download Web sarà sempre disabilitato.

Le opzioni principali per implementare la sicurezza a livello di riga di dati sono le seguenti :

I. Solamente nel tableau

un. Connessione live o di estrazione

b. Filtro utente creato e applicato per cartella di lavoro o origine dati

II. Approccio misto , in cui le informazioni utente in Tableau Server o Tableau Online corrispondono agli elementi di dati nel database

un. Connessione live o di estrazione

b. Sfrutta il Data Server

c. Utilizzare i filtri dell’origine dati (ad esempio nome utente () = [colonna utente dalla tabella di sicurezza nel database] o campo calcolato basato sulla funzione tableau nome utente ())

RLS standard: completamente gestito in Tableau

Consideriamo un esempio di implementazione di RLS esclusivamente in Tableau con filtri utente definiti in Tableau Desktop. Prima di tutto, creiamo tutti gli utenti e i gruppi necessari in Tableau Online.

Quindi, fai clic su “Server” nella barra dei menu di Tableau Desktop -> Crea filtro utente. Successivamente viene visualizzato un elenco di campi disponibili su cui possiamo basare il filtro utente.

Se non si è effettuato l’accesso a Tableau Server o Tableau Online, è possibile che venga richiesto di farlo. La finestra si aprirà e ti chiederà di inserire le tue credenziali.

Supponiamo di disporre di alcuni dati geografici e di assegnare ciascun utente alla regione appropriata, quindi solo un utente esegue il mapping a una determinata riga di dati.

Il nuovo calcolo utente viene visualizzato sotto le misure nel riquadro Dati. Proprio come gli altri campi, è possibile utilizzarlo in una o più visualizzazioni aggiungendolo allo scaffale dei filtri: dal riquadro Dati trascinare Filtro utente nello scaffale Filtri. Nella finestra di dialogo Filtro visualizzata, selezionare True, quindi fare clic su OK. Nota: se non si è effettuato l’accesso a Tableau Server o Tableau Online, l’opzione True non è visibile. In Tableau Desktop, accedi a Tableau Server o Tableau Online per selezionarlo. Nell’angolo in basso a destra di Tableau Desktop è presente un emulatore utente, che ci consente di vedere come apparirà la vista se un utente specifico accede. Puoi alternare tra alcuni utenti e la vista verrà filtrata per mostrare solo i relativi valori.

RLS standard: approccio ibrido

Inoltre, possiamo usare un approccio ibrido a RLS. Diamo un’occhiata a un esempio subito. Quindi, questa volta ci colleghiamo sia agli ordini (ordini con i rispettivi addetti alle vendite) che contengono dati effettivi per la visualizzazione sia alle tabelle Persone (tabella dei diritti). La tabella dei dati è unita alla tabella dei diritti contenente nomi utente e valori chiave. La tabella Persone è un esempio di avere elementi di dati nel database che associano gli utenti a parti specifiche di dati come Utenti nelle regioni.

Per creare un filtro utente che sfrutta questi dati, possiamo usare Campo calcolato. Creeremo una formula che controlla se il nome utente corrisponde al campo del venditore.

Una volta creato questo campo calcolato, possiamo usarlo in modo simile al filtro nell’esempio precedente. Può essere trascinato nello scaffale del filtro o applicato a più fogli di lavoro tramite incorporato come Filtro origine dati. Ora l’origine dati verrà filtrata per l’utente che ha effettuato l’accesso e non sarà in grado di aggirare il modello di sicurezza dei dati, a causa del filtro dell’origine dati.

Questo è un esempio relativamente semplice, nella vita reale può essere più complicato. Informazioni su altre funzioni utente e complessità delle tabelle dei diritti sono disponibili nelle sezioni seguenti.

Tabella dei diritti

La tabella “Persone”, menzionata sopra, è un esempio di tabella Titoli o protetti. La tabella dei diritti è una singola combinazione di attributi su cui verranno filtrati i dati. Ad esempio, il filtro su “Categoria”, “Sottocategoria” e “Regione” è un diritto unico. Le pratiche standard di progettazione del database indicano che raramente si dispone di una singola tabella che si adatta ai criteri per la tabella delle autorizzazioni. La maggior parte dei dati non sono necessariamente associati uno a uno a un singolo utente; è molto probabile che la sicurezza dei dati sia organizzata per ruolo, nome dell’organizzazione o entrambi.

Potrebbe anche essere necessario eseguire UNION per ottenere tutte le righe necessarie per rappresentare quel livello granulare di dati e calcoli particolari per generare un campo Chiave composita univoco. Certamente, puoi farlo nella finestra di dialogo JOIN di Tableau. Ma è molto chiedere a un utente finale di impostare ogni volta, quando la logica dovrebbe rimanere sempre la stessa. Quindi, è più pratico creare una vista, in modo che sia necessario UNIRE solo quella vista ‘tabella di sicurezza’ alla tabella di dati in Tableau.

Funzioni utente

Come già sapete, le funzioni utente possono essere utilizzate per creare filtri utente o filtri di sicurezza a livello di colonna che influiscono sulle visualizzazioni pubblicate su Tableau Server o Tableau Online, in modo che solo determinate persone possano vedere la visualizzazione. Vediamoli in modo più dettagliato:

· FULLNAME: FULLNAME ()

Restituisce il nome completo per l’utente corrente. Questo è il nome completo di Tableau Server o Tableau Online quando l’utente ha effettuato l’accesso; in caso contrario, il nome completo locale o di rete per l’utente di Tableau Desktop.

Esempio: [Manager] = FULLNAME ()

Se il gestore Joe Copling ha effettuato l’accesso, questo esempio restituisce True solo se il campo Manager nella vista conteneva Joe Copling. Se utilizzato come filtro, questo campo calcolato può essere utilizzato per creare un filtro utente che mostra solo i dati rilevanti per la persona che ha effettuato l’accesso al server.

· ISFULLNAME : ISFULLNAME (stringa)

Restituisce vero se il nome completo dell’utente corrente corrisponde al nome completo specificato o falso se non corrisponde. Questa funzione utilizza il server tableau o il nome completo online quando l’utente ha effettuato l’accesso; in caso contrario utilizza il nome completo locale o di rete per l’utente di Tableau Desktop.

Esempio: ISFULLNAME (“Joe Copling”)

Questo esempio restituisce true se Joe Copling è l’utente corrente, altrimenti restituisce false.

· ISMEMBEROF : ISMEMBEROF (stringa)

Restituisce vero se la persona che sta attualmente utilizzando Tableau è un membro di un gruppo che corrisponde alla stringa specificata. Se la persona che sta attualmente utilizzando Tableau ha effettuato l’accesso, l’appartenenza al gruppo viene determinata dai gruppi su Tableau Server o Tableau Online. Se la persona non ha effettuato l’accesso, questa funzione restituisce false.

Esempio: SE ISMEMBEROF (“Vendite”) POI “FINE” “Altre” FINE

· ISUSERNAME : ISUSERNAME (stringa)

Restituisce vero se il nome utente dell’utente corrente corrisponde al nome utente specificato o falso se non corrisponde. Questa funzione utilizza il Tableau Server o il nome utente online quando l’utente ha effettuato l’accesso; in caso contrario utilizza il nome utente locale o di rete per l’utente di Tableau Desktop.

Esempio: ISUSERNAME (“jcopling”)

Questo esempio restituisce true se l’utente corrente è il jcopling; altrimenti restituisce false.

· USERNAME : USERNAME ()

Restituisce il nome utente per l’utente corrente. Questo è il nome utente di Tableau Server o Tableau Online quando l’utente ha effettuato l’accesso; altrimenti è il nome utente locale o di rete per l’utente di Tableau Desktop.

Esempio: [Manager] = USERNAME ()

Se il gestore jcopling era connesso, questa funzione restituiva True solo quando il campo Manager nella vista è in copia. Se utilizzato come filtro, questo campo calcolato può essere utilizzato per creare un filtro utente che mostra solo i dati rilevanti per la persona che ha effettuato l’accesso al server.

RLS e relazioni gerarchiche

Per rappresentare diverse relazioni gerarchiche con i dati, una tecnica efficace consiste nell’avere una riga nella vista Entitlements che rappresenta ciascuno dei livelli più granulari di filtro di sicurezza. Probabilmente dovrai costruire una “vista dei diritti” non normalizzata da molte tabelle diverse che memorizzano diversi pezzi dei diritti dell’utente.

Diamo un’occhiata a questo esempio:

1) CEO

2) Manager

3) Responsabile regionale

Per rappresentarlo nella vista Titoli per alcune tabelle di origine che contengono dati per dipartimento e regioni, il CEO disporrà di una riga per ogni dipartimento e regione. Ogni responsabile disporrà di una riga per il dipartimento che appartiene alla propria responsabilità e a tutte le regioni. Ogni manager regionale avrà una riga solo per il suo dipartimento e le sue regioni.

Per le tabelle di diritti gerarchicamente complicati potrebbe essere necessario utilizzare più campi per unirli con una tabella che contiene dati. Questa è nota come chiave composita nella terminologia del database e ci sono due modi per gestirla:

1) Creare un campo chiave composita effettivo nella vista Titoli e nella tabella dati. Quindi UNISCITI ai due su quel singolo campo Chiave composita

2) UNISCITI alla vista Entitlements alla tabella dei dati su ciascun campo che compone la chiave composita.

La maggior parte delle organizzazioni ha una gerarchia, e spesso c’è il desiderio che coloro che sono più alti nella gerarchia possano accedere ai dati di tutti coloro che segnalano loro. Puoi costruire filtri gerarchici, in questo modo:

SE ISMEMBEROF (‘livello C) POI 1

ELSEIF ISMEMBEROF (‘Manager’) POI

IF [Campo nome utente gestore] = USERNAME () e [dipartimento (diritto)] = [dipartimento (tabella dati)] POI 1 ELSE 0 END

ELSE 0 END

RLS ed estratti

Gli estratti di tableau prendono qualsiasi relazione di tabella dalla schermata Live Connection e li combinano in una singola tabella attraverso una query, i cui risultati vengono trasformati in una singola tabella nel file Extract.

A partire da Tableau 2018.3, il motore Hyper extract è stato aggiornato con un’opzione per includere più tabelle, in particolare con l’intenzione di semplificare l’implementazione della sicurezza a livello di riga. L’uso di più tabelle può ridurre notevolmente il tempo necessario per generare un estratto, evitando completamente “l’espansione della duplicazione di righe”.

A partire dal 2018.3:

· Il design per la sicurezza a livello di riga sarà lo stesso sia per le connessioni live che per gli estratti

· L’estrazione di file con sicurezza creerà molto più velocemente

· Le migliori pratiche per le tabelle dei diritti sono ora fattibili in Estratti

Conclusione: dovrai fare il filtro da solo, in due modi:

1. Convertire ciascuna tabella in SQL personalizzato e aggiungere le clausole di filtro appropriate

2. Inserire la logica di filtro in una vista nel database

La tabella dei diritti dovrebbe essere una vista non normalizzata di tutti i diritti necessari per filtrare i dati al livello più granulare. In quasi tutti i casi, ciò significa che la vista dovrebbe contenere:

– Una colonna per Username, contenente i nomi utente esatti in Tableau Server e …

– Una riga per ogni livello dei diritti più granulari all’oggetto dati.

In un estratto a tabella singola non normalizzato, questo può far esplodere istantaneamente le dimensioni dell’estratto in proporzioni enormi. Ma in un estratto di più tabelle, entrambe le tabelle rimangono della stessa dimensione, non importa quanto grande sia una delle due. E dato che Hyper è abbastanza bravo a JOINing e filtraggio, la tecnica rimane molto veloce anche su grandi set di dati

Per implementare la sicurezza a livello di riga senza “esplodere” i dati, è necessario utilizzare il metodo CONTAINS (). Il metodo più semplice ad alte prestazioni che non duplica alcuna riga è di includere nell’elenco di tutti i nomi utente consentiti in un campo delimitato da virgole nei dati, quindi cercarlo utilizzando la funzione CONTAINS ():

CONTAINS ([Security Users Field], USERNAME ()) che può aiutare a verificare se campi di sicurezza complessi contengono determinati nomi utente registrati da Tableau Server.