Transaktionssicherheit

Sichere Transaktionsverarbeitung mit Timeouts, Savepoint-Unterstützung und Isolation-Durchsetzung.

Konfiguration

# policy.yaml
transactions:
  # Transaktionsbefehle erlauben
  enabled: true

  # Maximale Transaktionsdauer (verhindert lang laufende Sperren)
  max_duration: 30s

  # Maximale Statements pro Transaktion
  max_statements: 100

  # Erlaubte Isolationsstufen
  allowed_isolation_levels:
    - "read committed"
    - "repeatable read"
    # serializable wegen Performance deaktiviert

  # Savepoints
  allow_savepoints: true
TXN-001PASS

Transaktionsblock erlaubt

Gültige Transaktion

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = $1;
UPDATE accounts SET balance = balance + 100 WHERE id = $2;
COMMIT;

Erwartetes Ergebnis

BEGIN
UPDATE 1
UPDATE 1
COMMIT

Transaktionsbefehle (BEGIN, COMMIT, ROLLBACK) sind erlaubt. Jedes Statement innerhalb der Transaktion wird gegen die Whitelist validiert.

TXN-002BLOCKED

Lang laufende Transaktion - Timeout

Nach 30 Sekunden

ERROR: Transaktions-Timeout
DETAIL: Transaktion hat die maximale Dauer von 30 Sekunden überschritten.
HINT: Transaktion wurde automatisch zurückgerollt. Teilen Sie große Operationen in kleinere Batches auf.

Transaktionen, die das konfigurierte Timeout überschreiten, werden automatisch zurückgerollt, um Ressourcenerschöpfung und Lock-Konflikte zu verhindern.

TXN-003PASS

Savepoint-Unterstützung

Savepoints für partielles Rollback

BEGIN;
INSERT INTO orders (user_id, total) VALUES ($1, $2);
SAVEPOINT before_items;
INSERT INTO order_items (order_id, product_id) VALUES ($3, $4);
-- Falls Item-Insert fehlschlägt:
ROLLBACK TO SAVEPOINT before_items;
COMMIT;

Savepoints ermöglichen partielles Rollback innerhalb einer Transaktion. Nützlich für optionale Operationen, die fehlschlagen können.

TXN-004BLOCKED

Nicht erlaubte Isolationsstufe

Versuch

BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;

Erwartete Antwort

ERROR: Isolationsstufe nicht erlaubt
DETAIL: SERIALIZABLE ist in der Policy deaktiviert.
HINT: Verwenden Sie stattdessen READ COMMITTED oder REPEATABLE READ.

Das ALG erzwingt erlaubte Isolationsstufen, um Performance-Probleme durch zu strikte Isolation zu verhindern.

TXN-005BLOCKED

Transaktions-Statement-Limit

Transaktionen mit mehr als max_statements werden blockiert, um unkontrollierte Batch-Operationen zu verhindern, die Ressourcen verbrauchen.