Es soll möglich sein, einem Benutzer nur die Tupel einer Tabelle zu zeigen, die
für ihn freigebenen sind. D.h. zwei Nutzer mit unterschiedlichen Rechten sehen
für ein und die selbe Tabelle verschiedene Tupel. Im Allgemeinen werden zur
Lösung der Aufgabe für jeden Nutzer eine oder mehrere Views erstellt. Die View
filtert die Tabelle mit vorgegebenen Parametern. Der Nutzer stellt seine
Anfragen nicht mehr direkt an die Tabelle, sondern an die View. Der betriebende
Aufwand ist sehr groß und erhöht sich, wenn sich die Paramerter mit der Zeit
oft ändern. Genau hier setzt die Idee der Virtual Private Database an. Die
Filterung wird zur Laufzeit der Anfrage bewerkstelligt, indem die Anfrage mit
versteckten WHERE
Bedingungen erweitert wird. Die Erweiterungen werden
transparent vom DBMS durch Policy Funktionen erzeugt. Dazu wird eine PL/SQL
Funktion über eine Policy mit der zu schützenden Tabelle verknüpft. Die
Verknüpfung stellen Oracle Funktionen aus dem DBMS_RLS Packages
zur
Verfügung. Der PL/SQL Teil des Konstruktes aus Tabelle, Policy und PL/SQL
erzeugt die ergänzenden WHERE
Bedinungen und die Policy dient als Mittler
zwischen Tabelle und PL/SQL Teil. Das folgende Beispiel verdeutlicht die
Funktionsweise.
Beispiel 1:
SCOTT.EMP
ist für alle Benutzer nur während
der Geschäftszeit erlaubt.
WHERE
Klauseln in Form eines Text-Strings generiert:
Diese wird dann mit der Tabelle SCOTT.EMP
verkünpft. Dazu wird ein
Aufruf des DBMS_RLS Packages
benötigt:
Bei jeder Anfrage an diese Tabelle wird nun die Policy aufgerufen. Sie besitzt
mehrere Parameter. Interessant sind insbesondere policy_function
und
statement_type
. Erstere verweist auf die PL/SQL Funktion und letzere gibt
an, bei welcher Art von Anfrage die Policy reagiert.
Weil die Anfrage vom Typ SELECT
ist, führt Oracle die Policy Funktion aus.
Diese überprüft die Zeit mittels GetWorkHoursPredicate und liefert
einen Wert zurück, der an die SELECT
Anweisung als zusätzliche
WHERE
Bedingung angehangen wird. So sieht die SQL Anweisung intern aus:
Das Sicherheitskonzept funktioniert völlig transparent, dynamisch und ohne weitere Eingriffe in die Datenbank. Es ist dem DBA überlassen, wie er die Policies und PL/SQL Funktionen implementiert. Es stehen ihm alle Möglichkeiten offen. Weitere Beispiele und mehr Informationen befinden sich in [2] und [1].
Die vorgestellte VPD Technologie ermöglicht erstmals einen auf Tupelebene wirkenden Zugriffsschutz.