[permanenter Audit-Trail]
Als MySQLer fällt einem natürlich sofort das Binlog ein, in das MySQL
jede Datenänderung loggt. Allerdings hat das einen Schönheitsfehler:
MySQL loggt nicht, welcher MySQL-Account jeweils verwendet wurde.
Allerdings gibt es ab MySQL 5.5 ein API für Audit-Plugins, das diese
Information abgreifen könnte:
http://dev.mysql.com/doc/refman/5.5/en/audit-plugins.html
Viel schwerer wiegt jedoch, daß (Web-)Applikationen i.d.R. nur /einen/
MySQL-Account verwenden und der Benutzer sich nur gegenüber der
Applikation (und nicht der Datenbank) identifiziert. D.h. normaler-
weise kommen für MySQL alle Änderungen vom gleichen Account.
Was man nun machen könnte:
1. die Applikation führt ein entsprechendes Log selber. Dazu wird
einfach jedes INSERT/UPDATE/DELETE auf eine der "kritischen"
Tabellen zusammen mit Uhrzeit und Nutzername geloggt.
2. man verwendet doch das MySQL-Binlog, läßt die Applikation aber
in jedes entsprechende Statement einen SQL-Kommentar mit dem
Nutzernamen einfügen. Etwa so:
UPDATE /* App: foo, Form: bar, User: Müller */ Kunden SET ...
Ob das Ergebnis (eine laaaaange Liste SQL Statements mit Timestamps)
dem Kunden dann lesbar genug ist; und ob es ihm genügt, daß die "bevor"
Werte nur implizit da drin stehen, ist natürlich eine andere Frage.
Aber wenn man das schöner haben will, dann geht es definitiv *nur*
aus der Anwendung heraus.
Allerdings klingt das für mich nach einer typischen "Schlipsträger"
Forderung. Wahrscheinlich wird sich kein Schwein die Daten jemals
ansehen und über die anfallenden Datenmengen oder Anforderungen des
Datenschutzes (Kunde gelöscht - was ist mit den Kundendaten im Audit?)
hat auch niemand auch nur ansatzweise nachgedacht.
XL