Update-Requests abfangen, die viele Zeilen betreffen?

Themen rund um den praktischen Einsatz von Firebird. Fragen zu SQL, Performance, Datenbankstrukturen, etc.

Moderator: thorben.braun

Antworten
Jörg
Beiträge: 1
Registriert: Do 5. Jan 2023, 07:38

Hallo,

ich brauche eine Möglichkeit, um wilde und schädliche SQL-Requests abzufangen. bevor sie Schaden anrichten können.

Meine Idee: Ein Trigger, der bei jedem Update auf eine bestimmte Tabelle "BEFORE UPDATE" (oder VOR dem Commit) auf eine bestimmte Tabelle prüft, ob dieses Update zu viele Zeilen ändern würden, also etwa jedes Update, das mehr als 500 Zeilen ändern würde. Also das die Bedingungen auswertet. zählt, wie viele Zeilen von den Bedingungen betroffen wären, und wenn das einen Grenzwert überschreitet, wird die Ausführung abgebrochen, und Alarm geschlagen, und ein Rollback veranlasst.

Gibt es eine Möglichkeit, das in PSQL abzufragen?
bfuerchau
Beiträge: 388
Registriert: Mo 7. Mai 2018, 18:09

Im Prinzip schon.
Du kannst per RDB$Get_Context() und RDB$SET_CONTEXT() eine Transaktionsvariable setzen und die Anzahl der Triggeraufrufe zählen.
Wenn deine Zielzahl erreicht/überschritten ist, kannst du eine Exception auswerfen.
https://firebirdsql.org/refdocs/langref ... ption.html
Wenn allerdings keine Transaktion gestartet wurde, gibt es eine Autotransaktion für jeden einzelnen Satz.
Antworten