mercoledì 21 gennaio 2015

RDBMS ORACLE - VPD - BIP Virtual Private Database + Oracle Business Intelligence Publisher


Introduzione

Scopo e’ descrivere una possibile implementazione di VPD da associare a BIP per ottenere un taglio dei dati da riportare in output sul report.



Requisito di security

Quello che è stato richiesto è di avere un unico report che possa servire diversi utenti, ma a seconda di quale utente apre il report questi  recupera automaticamente un adeguato set di dati per l'utente e li visualizza all'interno del report generato.
Viene quindi richiesto un taglio dei dati all’origine in modo da visualizzare per ogni utenti i soli i dati ad esso consentito visualizzare.
Una possibile soluzione potrebbe essere la seguente[1]:
Al fine di estrarre i soli dati di interesse si potrebbe usufruire di una delle funzionalità di database di Oracle, Virtual Private Database (VPD), che offre un livello di sicurezza sui dati nel database.
Enterprise BI Publisher supporta un meccanismo di autenticazione proxy, con la quale passa le informazioni dell'utente sessione fino al livello di database e si avvale della politica di sicurezza a livello di riga che è implementato a livello di database per restituire un insieme di dati appropriato.
L’utilizzo del VPD comporta lo sviluppo di una componente pl-sql a livello di database ed alla creazione di strutture di metadati che ne permettano di costruire un predicato da associare alle query che richiamano la tabella o vista posta sotto VPD.
Per la creazione delle funzioni VPD si rimanda ai manuali oracle.
Lato BIP occorre attivare l’autenticazione a livello di proxy in modo da settare le variabili di contesto da utilizzare all’interno delle funzioni di policy VPD o attivare eventualmente dei trigger jdbc che effettuano la valorizzazione delle stesse variabili di contesto fornite in automatico in fase di connessione al database.
Il meccanismo di autenticazione proxy di supporto è progettato per funzionare con qualsiasi sorgente dati tramite JDBC o una connessione JNDI.  
Su come implementare tale policy o attivare l’autenticazione da Proxy si rimanda alla manualistica del prodotto.
·         Database Security Guide 10g or the Oracle Database Security Guide 11g
·         Administrator's Guide for Oracle Business Intelligence Publisher Release 11g (11.1.1)
·         Oracle® Fusion Middleware Administrator's Guide for Oracle Business Intelligence Publisher 11g Release 1 (11.1.1)
Part Number E22255-02

Definizione Virtual Private Database (VPD)

L’implementazione di policy di VPD consentono a più utenti di accedere ad un medesimo schema vedendo ognuno solo la porzione di dati di loro interesse. L’implementazione di un VPD permette di centralizzare il controllo degli accessi, alle tabelle dati, tramite l’implementazione di regole di security evitando in questo modo un accesso non controllato alla base dati.
Il VPD permette l’implementazione di row-level security (RLS) e Fine Grained Access Control (FGAC) su tabelle e viste. L’idea alla base del FGAC è l’implementazione di un meccanismo di controllo degli accessi a livello di riga per una sessione utente in contrapposizione a un accesso concesso da grant e roles di Oracle. L’implementazione del VDP permette ad un utente l’accesso ad una tabella o vista limitandone il retrieve dei dati solo a righe alle quali sono associate particolari grant. I dati possono essere acceduti effettuando o un taglio orizzontale sulla tabella o un taglio verticale e quindi accedendo solo ad alcune colonne. A seconda degli attributi associati all’utente, a meno che l’utente non sia sys o con particolari privilegi di accesso, l’RDBMS riscrive automaticamente ogni SQL aggiungendo un predicato restituito da una policy function. Quindi Oracle raccoglie le informazioni di contesto di un’applicazione in fase di accesso utente e quindi chiama una policy function che restituisce un predicato. Un predicato è una clausola di where che qualifica un particolare set di righe all'interno della tabella.
Un modello di sicurezza VPD utilizza il pacchetto dbms_rls di Oracle (RLS sta per protezione a livello di riga) per implementare le politiche di sicurezza e contesti di applicazione. Ciò richiede  quindi di implementare e progettare una serie di regole da applicare alla visualizzazione dei dati, che verranno esplicitate nelle query con l’aggiunta in automatico di un predicato.
Di seguito un esempio di policy invocation:




[1] Resta ben inteso che occorre effettuare delle prove che ne diano una certezza di applicazione, in quanto la soluzione indicata viene distribuita su più livelli e prodotti Oracle.




Il VPD risulta essere un modo totalmente diverso di gestire gli accessi di Oracle rispetto a quanto basato sui meccanismi di sicurezza tradizionali (grants e roles). Possono essere individuati i seguenti benefici espressi dall’utilizzo del VPD:
·         Protezione dinamica — non c'è bisogno di mantenere i ruoli complessi e grants.
·         Multiple Security — possibilità di fornire differenti politiche di sicurezza su un oggetto. Questo rende VPD perfetto per le applicazioni Web che sono distribuite per molte aziende.
·         Nessuna back doors — gli utenti non possono ignorare/bypassare i criteri di sicurezza incorporati nelle applicazioni in quanto la politica di sicurezza è associata ai dati.
·         Possono essere definite regole di accesso complesse — con VPD, è possibile utilizzare i valori dei dati per specificare regole di accesso complesse che sarebbero stato difficile creare con concessione di sicurezza. Si può facilmente limitare l'accesso alle righe.
Tuttavia esistono anche evidenti inconvenienti nell’utilizzo del VPD:
·         Protezione a livello di colonna difficile — perché l'accesso è controllato con l'aggiunta di un clausole di where, l’accesso a livello di colonna può essere mantenuto solo mediante la definizione di viste multiple per ogni classe di utente finale.
·         Richiede Oracle ID per ogni utente — a differenza di sicurezza gestita esternamente, VPD richiede che un ID utente Oracle deve essere definito per ogni persona che si connette al database. Questo aggiunge il sovraccarico e la manutenzione. 


Applicazione di Secutiry Policies alle tabelle

Una volta definito il package di policy occorre associare alle singole tabelle la funzione di policy corretta, per fare questo si utilizza il package DBMS_RLS utilizzando le procedure:
·              dbms_rls.add_policy
·              dbms_rls.drop_policy
·              dbms_rls.enable_policy
·              dbms_rls.refresh_policy
 







View
Description
ALL_POLICIES
Describes all Oracle Virtual Private Database security policies for objects accessible to the current user.
ALL_POLICY_CONTEXTS
Describes the driving contexts defined for the synonyms, tables, and views accessible to the current user. A driving context is an application context used in an Oracle Virtual Private Database policy.
ALL_POLICY_GROUPS
Describes the Oracle Virtual Private Database policy groups defined for the synonyms, tables, and views accessible to the current user
ALL_SEC_RELEVANT_COLS
Describes the security relevant columns of the security policies for the tables and views accessible to the current user


  Tabella 1 Data Dictionary View



Nessun commento:

Posta un commento