Wer war das ...? Auditing in APEX-Anwendungen ...?
Immer mehr Anwendungen stehen mittlerweile vor der Anforderung, dass
Tabellenzugriffe auditiert werden müssen. Jede Operation muss also mitgeloggt werden.
Während dies für DML-Anweisungen (INSERT, UPDATE, DELETE) mit einfachen
Mitteln (Trigger) realisierbar wäre, stellt sich dies für SELECT-Anweisungen
auf den ersten Blick etwas komplizierter dar, denn einen SELECT-Trigger gibt
es nicht ...
Hier kommen die Auditing-Möglichkeiten der Datenbank ins Spiel. Mit dem
Kommando AUDIT SELECT ON {Tabellenname} wird
Auditing von Abfragen für eine
bestimmte Tabelle aktiviert und im sog. Audit-Trail der Datenbank mitgeschrieben.
Allerdings werden hier keine APEX-spezifischen Informationen mitgeschrieben,
was bedeutet, dass alle durch APEX ausgeführten Operationen unter den
Datenbankuser APEX_PUBLIC_USER erfasst werden
(der tatsächlich angemeldete Datenbankuser ist
bei allen APEX Sitzungen stets APEX_PUBLIC_USER oder
ANONYMOUS, wenn Sie das PL/SQL Embedded Gateway nutzen). Diese Informationen
sind zuwenig; für ein wirkungsvolles Auditing werden auch die APEX-spezifischen
Informationen benötigt.
Daher soll das Standard-Auditing hier gar nicht weiter betrachtet werden;
dieser Tipp beschäftigt sich mit dem wesentlich mächtigeren Fine-Grained Auditing ;
dieses erlaubt mit wenigen Eingriffen das Loggen der für APEX relevanten Informationen
wie dem APEX-Usernamen, der APEX-Applikations-ID oder der Session-ID. Darüber hinaus
erlaubt Fine-Grained Auditing (wie der Name schon vermuten lässt) eine feingranulare
Einrichtung des Auditings. Es wird nicht einfach nur die Tabelle EMP auditiert,
sondern bspw. die Spalten SAL und COMM und dies nur für die Zeilen mit der DEPTNO=20.
Fine-Grained Auditing ist Bestandteil der Enterprise Edition
der Datenbank; wenn
Sie also mit einer Standard-Edition oder einer OracleXE arbeiten, können Sie diesen
Tipp nicht nachvollziehen.
Die folgenden Schritte zeigen, wie ein Auditing für die Tabelle EMP aufgesetzt
wird. Sobald die Spalten SAL oder COMM von Mitarbeitern mit DEPTNO = 20 abgefragt
werden, soll ein Log-Eintrag geschrieben werden.
Bestimmte Informationen wie der Datenbank-Username, die Datenbanksession oder
die ID des Betriebssystem-Prozesses werden von Fine-Grained Auditing automatisch
mitgeschrieben; für die APEX-spezifischen Details muss ein sog. Handler eingerichtet werden,
welcher diese Informationen in eine eigene Tabelle schreibt. Diese Tabelle legen wir
zunächst wie folgt an ...
Die Spalten AUDIT_ENTRYID und DB_SESSION dienen zum späteren Join mit der
View DBA_FGA_AUDIT_TRAIL, welche die standardmäßig mitgeloggten Audit-Informationen
enthält. Als nächstes wird eine PL/SQL-Prozedur benötigt, welche Einträge
in diese Tabelle schreibt. Diese PL/SQL-Prozedur wird später von Fine-Grained
Auditing automatisch aufgerufen, daher müssen die Parameter (die Signatur)
stets wie hier vorgestellt aussehen.
Bis hierhin ist dies allerdings noch eine gewöhnliche PL/SQL-Prozedur -
das ändert sich, wenn als nächstes die Auditing-Policy aktiviert wird. Damit wird die Prozedur
"scharf" geschaltet und von nun an automatisch bei jedem
SELECT auf die EMP-Tabelle ausgeführt ... wenn ...
- Die Zeilen der DEPTNO 20 betroffen sind und
- Eine APEX-Session aktiv ist, also die APEX-Variable APP_USER gesetzt ist
Probieren Sie es aus. Setzen Sie zunächst mit SQL*Plus ein SELECT
auf die Tabelle EMP ab und achten Sie darauf, dass Zeilen der DEPTNO 20 betroffen sind.
Die Tabelle APEX_AUDIT_LOG bleibt leer; es lag ja keine
APEX Session vor.
Erzeugen Sie nun eine APEX-Applikation mit einem Bericht auf die Tabelle
EMP und führen Sie diesen aus. Anschließend sollten Sie Einträge in der Tabelle
finden ...
Abbildung 1: "Einträge in der Tabelle "APEX_AUDIT_LOG""
An diesen Einträgen ist schon erkennbar, dass der APEX-User ADMIN
zum gegebenen Zeitpunkt aus Applikation 136, Seite 3 einen Audit-Eintrag
ausgelöst hat. Diese Information lässt sich nun mit den standardmäßig
mitgeschriebenen Einträgen kombinieren ...
An den Spalten SQL_TEXT und SQL_BIND kann sogar die jeweilige SQL-Abfrage und die
übergebenen Parameter erkannt werden; man kann die durch die APEX-Applikation getätigte
Abfrage also sehr genau nachvollziehen.
Abbildung 2: Kombination der Einträge in der Tabelle "APEX_AUDIT_LOG" mit dem Standard-Audit-Trail
Mit dieser SQL-Abfrage ließe sich nun abschließend wiederum eine APEX-Applikation
erstellen, die für dann bspw. dem Datenschutzbeauftragten bereitgestellt wird; dieser kann
somit -stets online- die Einhaltung der ggfs. bestehenden Datenschutzrichtlinien
überprüfen. Beachten Sie dabei nur, dass eine solche Anwendung das Audit-Trail lesen
können muss. Die Bereitstellung der Informationen an ein Datenbankschema COMPLIANCE_APP
könnte dann wie folgt aussehen:
Mehr Informationen zu Auditing in der Datenbank finden Sie ...
Zurück zur Community-Seite
|