Inhaltsverzeichnis
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
Problem: Ü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
Lösung: Virtual Private Database 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:
SELECT * FROM emp WHERE empno=(SELECT empno FROM emp WHERE ename = sys_context('userenv','session_user')
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
SELECT COUNT(*) FROM personen;
Überprüfen der verwendeten Policie akutell in dieser Session
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://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:
APEX: