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.
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
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