Audit-Logging über Systemgrenzen: Zugriff und Änderung in Access UND WordPress dokumentieren

Worum geht’s?

Wenn Access und WordPress Hand in Hand arbeiten, willst Du wissen,
wer was wann geändert oder gesehen hat – und in welchem System.

Ein einfaches Audit-Log in einem System reicht nicht.
Wir brauchen ein kombiniertes Logging – Access lokal, WordPress im Web.
Und beides möglichst automatisiert und nachvollziehbar.

Was loggen wir?

Grundsätzlich:

  • Zugriffe auf sensible Daten
  • Änderungen an Datensätzen
  • Löschungen
  • Login und Logout (nur WordPress)

Ziel: Ein gemeinsames Reporting, aber getrennte Datenerfassung.

Teil 1: Audit-Logging in Access (lokal)

Tabellenstruktur für Log

Erstelle in Access eine Tabelle tblAuditLog:

FeldnameTyp
IDAutowert
ZeitpunktDatum/Zeit
BenutzerText (50)
AktionText (50)
TabelleText (50)
PrimärschlüsselText (50)
DetailsMemo

Beispiel-VBA für INSERT/UPDATE-Logging

Public Sub LogChange(ByVal Aktion As String, ByVal Tabelle As String, ByVal PK As String, Optional ByVal Details As String = "")
    Dim sql As String
    sql = "INSERT INTO tblAuditLog (Zeitpunkt, Benutzer, Aktion, Tabelle, Primärschlüssel, Details) " & _
          "VALUES (Now(), '" & Environ("USERNAME") & "', '" & Aktion & "', '" & Tabelle & "', '" & PK & "', '" & Replace(Details, "'", "''") & "')"
    CurrentDb.Execute sql, dbFailOnError
End Sub

Einsatz z. B. im Formular-AfterUpdate

Private Sub Form_AfterUpdate()
    Call LogChange("Update", Me.RecordSource, Me.ID, "Feld1=" & Me.Feld1 & "; Feld2=" & Me.Feld2)
End Sub

Optional: Nur bei echten Änderungen loggen

Dafür müsstest Du Dir vorherige Feldwerte merken und vergleichen – Aufwand lohnt sich bei komplexen Tabellen.

Teil 2: Audit-Logging in WordPress (webbasiert)

Varianten

  1. Plugin verwenden
    Plugins wie „WP Activity Log“ oder „Simple History“ loggen viele Aktionen automatisch.
  2. Eigene Logging-Tabelle + PHP-Hooks

Für eigene Datenbankanwendungen mit benutzerdefinierten CPTs oder API-Zugriffen lieber direkt selber loggen.

Tabellenstruktur in MySQL

CREATE TABLE wp_custom_auditlog (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    timestamp DATETIME NOT NULL,
    user_id BIGINT,
    action VARCHAR(100),
    object_type VARCHAR(50),
    object_id VARCHAR(50),
    details TEXT
);

PHP-Funktion zum Logging

function log_custom_action($action, $object_type, $object_id, $details = '') {
    global $wpdb;
    $wpdb->insert('wp_custom_auditlog', [
        'timestamp' => current_time('mysql'),
        'user_id' => get_current_user_id(),
        'action' => $action,
        'object_type' => $object_type,
        'object_id' => $object_id,
        'details' => $details
    ]);
}

Beispiel-Aufruf

log_custom_action('update', 'lieferung', 1021, 'Lieferdatum geändert von 10.7 auf 12.7');

Teil 3: Konsolidierung beider Logs

Du brauchst keinen „Live-Abgleich“.
Aber eine vereinheitlichte Auswertung ist sinnvoll.
Z. B. über Power BI, Access-Abfragen oder SQL Server Import.

Option 1: SQL Server übernimmt beide Logs

Importiere regelmäßig:

  • tblAuditLog aus Access
  • wp_custom_auditlog aus MySQL (ODBC-Linked Table oder ETL)

Option 2: Access liest beide Logs

Beispiel-Abfrage mit UNION:

SELECT Zeitpunkt, Benutzer, Aktion, Tabelle AS Objekt, Primärschlüssel AS ObjektID, Details
FROM tblAuditLog
UNION ALL
SELECT timestamp, u.user_login, action, object_type, object_id, details
FROM wp_custom_auditlog l
LEFT JOIN wp_users u ON l.user_id = u.ID

Voraussetzung: wp_users ist ebenfalls verknüpft via ODBC.

Besonderheit: Löschungen

In Access:

  • Vor dem Löschen per BeforeDelConfirm ein Log schreiben
Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
    Call LogChange("Delete", Me.RecordSource, Me.ID)
End Sub

In WordPress:

  • Vor dem Löschen before_delete_post oder delete_post Hook nutzen:
add_action('before_delete_post', function($post_id) {
    log_custom_action('delete', 'post', $post_id, 'Post gelöscht');
});

Sicherheit & DSGVO

  • Keine sensiblen personenbezogenen Daten im Klartext loggen
  • Wenn doch, dann mit Zugriffsschutz und Löschkonzept
  • Log-Tabellen selbst nicht manipulierbar machen (nur INSERT)

Mein Fazit

Zwei Welten, ein Ziel: nachvollziehen, was war.
Mit ein paar Zeilen Code bekommst Du saubere Logs – getrennt, aber auswertbar.
Du brauchst nur Disziplin. Und einen Schafstall, der nicht wackelt.

Kategorien: