Zum Inhalt springen
hs-sql-agent
2.0.2
Dokumentation 2.0.2
Dokumentation SQL-Compiler

Safe DML

Auswirkungen vorab prüfen, die Freigabe binden, die Zielzeilen erneut prüfen und nur die exakt freigegebene Änderung per Commit übernehmen.

DML folgt einem strengeren Pfad als die Ausführung von Abfragen, weil die Freigabe zum Zeitpunkt des Commits weiterhin genau dieselbe Datenänderung beschreiben muss.

01 Kompilieren
02 Vorschau
03 Freigeben
04 Erneut prüfen
05 Commit
Vorschau statt Änderung Die Anweisungen UPDATE und DELETE lesen zunächst die aktuell passenden Zeilen in einer Vorschau-Transaktion, ohne die Änderung anzuwenden.
Freigabe ist an den geprüften Zustand gebunden Ein einmaliger Freigabenachweis bindet den validierten Plan, die Richtlinienversion, die Anzahl betroffener Zeilen und den Fingerabdruck der Zeilenmenge.
Vor dem Commit wird der Ist-Zustand erneut geprüft Die Commit-Transaktion fragt die Zielzeilen erneut ab und bricht ab, wenn die freigegebenen Fakten nicht mehr übereinstimmen.

UPDATE und DELETE

  1. Datenänderung kompilieren

    Die angeforderte Änderung parsen, validieren, autorisieren und kompilieren, bevor eine Freigabe angefordert wird.

  2. Betroffene Zeilenmenge vorab prüfen

    Eine Vorschau-Transaktion öffnen und die aktuell passenden Zeilen lesen, ohne die Datenänderung auszuführen.

  3. Einmaligen Freigabenachweis erzeugen

    Den Freigabenachweis an den validierten kompilierten Plan, die Richtlinienversion, die Anzahl betroffener Zeilen und den Fingerabdruck der Zeilenmenge binden.

  4. Menschliche Freigabe über MCP Elicitation anfordern

    elicitation/create senden und eine ausdrückliche Formularfreigabe durch den MCP-Client verlangen.

  5. Freigabenachweis verbrauchen

    Nach der Annahme den einmaligen Freigabenachweis validieren und verbrauchen, damit er nicht als allgemeines Zugriffstoken wiederverwendet werden kann.

  6. In der Commit-Transaktion erneut abfragen

    Die Zielzeilen erneut lesen und aktuellen Fingerabdruck sowie Zeilenanzahl mit der freigegebenen Vorschau vergleichen.

  7. Nur bei unverändertem Zustand per Commit übernehmen

    Die kompilierte Datenänderung nur dann ausführen, wenn Plan, Richtlinie, Freigabenachweis, Zeilenanzahl und Zeilenmenge unverändert sind.

INSERT VALUES

Eine Anweisung INSERT ... VALUES besitzt keine bereits vorhandene Zielzeilenmenge. Deshalb bindet das Freigabeprotokoll das unveränderliche Insert-Payload und den exakten kompilierten Plan statt einer Vorschau vorhandener Zeilen.

Elicitation ist erforderlich

execute_dml_sql und veröffentlichte DML Custom Tools setzen Elicitation per Formular (form Elicitation) im MCP-Client voraus. Ein Client, der diesen Freigabeprozess nicht ausführen kann, kann diese Änderungspfade nicht verwenden.

Dies unterscheidet sich bewusst von einem reinen Bestätigungsdialog in der Benutzeroberfläche: Der Freigabenachweis ist Teil des serverseitigen Änderungsprotokolls und wird vor der Ausführung erneut geprüft.

Verwandte Dokumentation