Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:virtual_private_database

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
prog:virtual_private_database [2019/05/24 18:24] – [Quellen] gpipperrprog:virtual_private_database [2019/05/24 18:25] (aktuell) – [Quellen] gpipperr
Zeile 1: Zeile 1:
 +====== Oracle Virtual Private Database (VPD) und Oracle Label Security======
  
 +**Seit Oracle 8i**
 +
 +**In Arbeit**
 +
 +
 +Mit Application Context and Fine-Grained Access Control kann der Zugriff auf Daten innerhalb einer Tabelle sehr gut eingeschränkt werden.
 +
 +
 +===Zugriff auf Tabellenebene prinzipiell einschränken===
 +
 +<fc #800000>**Problem:**</fc> 
 +Über normale Rechte kann das Lesen auf einer Tabelle nur auf alles oder nichts gesetzt werden
 +
 +
 +Rechte auf Zeilen können über die Anwendung geprüft werden, aber die Anwendung kann mit SQL*Plus umgangen werden
 +Mit Views sind nur bedingte Einschränkungen möglich und nur schwer zu warten bei sehr vielen unterschiedlichen Berechtigungen
 +
 +<fc #008080>**Lösung: Virtual Private Database**</fc>
 +Bei jedem Zugriff auf eine Tabelle wird zuvor eine versteckte Funktion ausgewertet, die das SQL Statement entsprechend einschränkt
 +
 +
 +==Lizenz==
 +
 +  * Oracle Label Security => EE  + Extra Option notwendig
 +  * VPD => EE ohne Extra Option 
 +
 +===Fine Grained Access Control mit dem Package DBMS_RLS==
 +
 +Eine Funktion wird einer Tabelle zugeordnet
 +
 +Beim Parsen eines SQL-Statements wird das Ergebnis der Funktion in die Where-Bedingung mit eingearbeitet.
 +
 +Beispiel: (Angestellter darf nur seinen Datensatz sehen)
 +
 +Funktion erzeugt Prädikat: 
 +
 +empno=(select empno from emp where ename = sys_context('userenv','session_user')
 +
 +
 +Angestellter sucht mit select * from emp
 +
 +Automatisch wird das SQL-Statement erweitert um:
 +
 +<code sql>
 +
 +select * from emp where empno=(select empno from emp where ename = sys_context('userenv','session_user')
 +
 +</code>
 +
 +
 +Dazu den Application-Context mit sys_context benutzerdefiniert erweitern.
 +
 +----
 +
 +==== Überwachen ====
 +
 +
 +==== Problem - Ist die VPD in der aktuellen Session in Verwendung ? ====
 +
 +Zugriff auf eine Tabelle mit RLS
 +<code plsql>
 +select count(*) from personen;
 +</code>
 +
 +Überprüfen der verwendeten Policie akutell in dieser Session
 +<code plsql>
 +select * from V$VPD_POLICY;
 +
 +ADDRESS|PARADDR|SQL_HASH|SQL_ID|CHILD_NUMBER|OBJECT_OWNER|OBJECT_NAME|POLICY_GROUP|POLICY|POLICY_FUNCTION_OWNER|PREDICATE
 +--------------------------------------------------------------------------------------------------------------------------
 +0000000075443B20|00000000792EAF18|2338103776|0ur9ps25pt8g0|0|INFO|PERSONEN|SYS_DEFAULT|PERSONEN_ZUGRIFFSKONTROLLE|INFO|1=1
 +
 +</code>
 +
 +
 +----
 +
 +
 +==== Quellen ====
 +
 +Oracle
 +  * Security Guide 18c => https://docs.oracle.com/en/database/oracle/oracle-database/18/dbseg/index.html
 +  * Oracle Label Security  => https://docs.oracle.com/en/database/oracle/oracle-database/18/olsag/index.html
 +
 +
 +Web:
 +
 +  * https://oracle-base.com/articles/8i/virtual-private-databases
 +
 +
 +APEX:
 +  * https://www.doag.org/formes/pubfiles/9626052/2017-DEV-Markus_Geis-APEX_-_LDAP__OUD__-_VPD-Praesentation.pdf
 +  * https://jeffkemponoracle.com/2019/03/oracle-workspace-manager-apex-vpd/
prog/virtual_private_database.txt · Zuletzt geändert: 2019/05/24 18:25 von gpipperr