prog:virtual_private_database
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
prog:virtual_private_database [2018/11/19 11:54] – gpipperr | prog: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 # | ||
+ | Ü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 # | ||
+ | Bei jedem Zugriff auf eine Tabelle wird zuvor eine versteckte Funktion ausgewertet, | ||
+ | |||
+ | |||
+ | ==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(' | ||
+ | |||
+ | |||
+ | 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(' | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | 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; | ||
+ | </ | ||
+ | |||
+ | Ü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 | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | ==== Quellen ==== | ||
+ | |||
+ | Oracle | ||
+ | * Security Guide 18c => https:// | ||
+ | * Oracle Label Security | ||
+ | |||
+ | |||
+ | Web: | ||
+ | |||
+ | * https:// | ||
+ | |||
+ | |||
+ | APEX: | ||
+ | * https:// | ||
+ | * https:// |
prog/virtual_private_database.txt · Zuletzt geändert: 2019/05/24 18:25 von gpipperr