EntwicklerMitarbeiter-Handbuch

AuditLog-Analyse

Wie Sie gezielt AuditLog-Entries fuer einen Kunden, eine Aktion oder einen Zeitraum finden. AuditLog ist die einzige Quelle der Wahrheit fuer sicherheitsrelevante Events.

AuditLog-Schema (Kurzfassung)

  • id: UUID
  • operator_id: Ops-User (oder system fuer Webhook-Trigger)
  • customer_id: Optional FK zu self_service_customers (Phase 2)
  • action: Enum (z.B. license.created, subscription.updated, invoice.pdf_rendered)
  • target: String mit Entity-Referenz (z.B. license:abc-123)
  • request_id: Stripe-Event-ID bei Webhooks, sonst UUID
  • created_at: DATETIME, UTC

Haeufige Such-Querys

Alle Aktionen eines Kunden (letzte 30 Tage)

SQLaudit.sql
SELECT * FROM audit_log
WHERE customer_id = 'abc-123'
  AND created_at > datetime('now', '-30 days')
ORDER BY created_at DESC;

Alle Stripe-Webhook-Events (mit Status)

SQLaudit.sql
SELECT request_id, action, target, created_at
FROM audit_log
WHERE operator_id = 'system'
  AND action LIKE 'stripe.%'
ORDER BY created_at DESC
LIMIT 100;

Fehlgeschlagene Webhooks (5xx-Response)

SQLaudit.sql
SELECT * FROM audit_log
WHERE action = 'stripe.webhook.failed'
  AND created_at > datetime('now', '-7 days')
ORDER BY created_at DESC;

Token-Version-Inkrements (Lizenz-Widerrufungen)

SQLaudit.sql
SELECT target, created_at, operator_id
FROM audit_log
WHERE action = 'license.token_version_incremented'
ORDER BY created_at DESC
LIMIT 50;

Interpretation

license.token_version_incremented: Ops hat eine Lizenz manuell widerrufen oder migriert. Hardware-Binding bleibt erhalten, aber das alte JWT ist ab jetzt ungueltig.

invoice.pdf_rendered: Ein Rechnungs-PDF wurde generiert. Mit customer_id verknuepft, um Mehrfach-Downloads nachvollziehbar zu machen.

all_inclusive.activation: Phase-2-Bundle wurde fuer einen Kunden aktiviert. Target enthaelt eine Liste der eingeschlossenen Plugins (kommasepariert).

customer.reactivation: Hardware-Wechsel via Self-Service-Portal. operator_id = system, customer_id = Pilotkunde.