TaskMonkey Handbuch

Database Gateway

Externe SQL-Datenbanken sicher und temporär per Tool abfragen.

Manchmal brauchst du Daten aus einer fremden Datenbank — der Live-Shop-DB des Kunden, einem alten CRM, einem Legacy-System. Direkter SQL-Zugriff von TaskMonkey aus geht nicht (Netzwerk, Firewall, Sicherheit). Lösung: das Database Gateway.

Konzept

Statt eine permanente DB-Verbindung zu öffnen, deployt das Gateway-Tool ein kleines, signiertes PHP-Script über SSH auf den Webserver des Ziels. Das Script nimmt SQL-Queries per POST entgegen, führt sie auf der lokalen DB des Servers aus und gibt JSON zurück. Nach Ablauf wird es wieder gelöscht.

Vorteile:

  • Kein VPN, kein Tunnel, keine direkte DB-Verbindung
  • Token-basiert, zeitlich begrenzt
  • Read-only oder Read/Write konfigurierbar
  • Funktioniert mit jeder DB, die das Server-PHP erreichen kann (MySQL, PostgreSQL, SQLite — entscheidet die Konfiguration des Ziel-Servers)

Voraussetzungen

Du brauchst SSH-Zugang zum Ziel-Webserver mit einem Key, dessen privater Teil hinterlegt ist. Pro Ziel hinterlegst du in deinem Workspace eine Connection-Config mit:

Feld Bedeutung
hostname Server-Adresse für SSH
remote_user SSH-User
web_root Pfad, in dem das Gateway-Script abgelegt wird (muss per HTTP erreichbar sein)
ssh_key Pfad zum privaten Schlüssel auf dem TaskMonkey-Server
key_passphrase falls der Key passwortgeschützt ist
base_url öffentliche URL des web_root
allow_write optional, default false — erlaubt INSERT/UPDATE/DELETE

Wo genau diese Config landet, klärt dein Betreiber. Typisch: config/remote_databases/<projekt>.php in deinem Workspace.

Tools

Drei Tools, die du in deiner tools-Liste freigibst:

Tool Zweck
deployGateway Lädt das Script auf den Ziel-Server, generiert Token, hält 24h aktiv (default)
executeQuery Sendet SQL-Query an das aktive Gateway, bekommt Ergebnis als JSON
removeGateway Räumt das Script wieder ab (sollte nach getaner Arbeit gerufen werden)

Beispiel-Flow im Chat

User: "Wie viele Bestellungen mit Status 'pending' liegen im Shop?"

Modell:
1. deployGateway(project: 'kunde_shop')   → Token erhalten
2. executeQuery(sql: "SELECT COUNT(*) FROM orders WHERE status='pending'")
3. removeGateway(project: 'kunde_shop')

Antwort: "Aktuell 23 offene Bestellungen."

Im Prompt empfiehlt es sich, das Modell explizit anzuweisen, am Ende removeGateway zu rufen — sonst liegt ein offenes Gateway 24h herum.

Sicherheit

Mechanismus Schutz
Random-Token (256 bit) jeder Request muss den Token mitschicken
expires_at Tokens laufen ab (default 24h)
allow_write Default false Schreib-Queries werden serverseitig abgewiesen
SSH-Key-Auth nur wer den Key hat, kann ein Gateway deployen
removeGateway nach getaner Arbeit: Script weg, Token wertlos

Trotzdem: Das Gateway ist ein Live-Zugriff auf eine fremde Produktiv-DB. Setze es nur ein, wenn:

  • Du die Verantwortung hast oder explizit autorisiert wurdest
  • Defaults restriktiv sind (read-only)
  • Tools nur die Queries machen, die fachlich nötig sind — keine SELECT *-Datenkraken

Use-Cases

  • Migrations-Checks: „Sind alle Datensätze aus der alten DB rüber?"
  • Live-Reporting: „Zeig mir den heutigen Umsatz aus dem Shop"
  • Daten-Recherche: „Welche Kunden haben das Produkt X bestellt?"
  • Konsistenz-Checks: „Gibt es Bestellungen ohne zugehörigen Kunden?"

Was sich nicht dafür eignet:

  • Massendaten-Migrationen (Tool-Calls haben ein Token-Budget)
  • Produktive Schreibzugriffe ohne sehr klare Audit-Anforderungen — nimm dafür eine echte API
  • Daten, die du dauerhaft brauchst — pull sie einmal, leg sie in deine eigene DB (z. B. Supabase)

Verwandt

  • Supabase — wenn du eine eigene DB brauchst, nicht eine fremde anzapfen willst
  • Eigene REST-API anbinden — wenn das Zielsystem eine API hat, nimm die statt SQL

Debug

tm test-tool deployGateway project=kunde_shop
tm test-tool executeQuery sql='SELECT 1'
tm logs

Wenn ein Deploy fehlschlägt: meistens SSH-Key falsch, web_root nicht beschreibbar, oder das base_url zeigt nicht auf den Web-Root. Reines SSH-Login zum Ziel manuell testen, dann nochmal versuchen.

Zuletzt aktualisiert: 2026-04-19