---
title: "Datenbank-Tool"
description: "Assistenten SQL-Abfragen gegen Deine Datenbank ausführen lassen"
canonical_url: "https://meingpt.com/docs/integrations/connectors/mcp-database"
language: de
---

# Datenbank-Tool

Das Datenbank-Tool gibt Deinen Assistenten direkten SQL-Zugriff auf eine Datenbank — für Auswertungen, Reporting und Fragen an echte Daten statt an eine Wissensbasis.

## Überblick

Das Tool bringt drei Methoden mit:

- **`query_database_readonly`** — lesende Abfragen (`SELECT`, `SHOW`, `DESCRIBE`, `EXPLAIN`, `WITH`) in einer erzwungen read-only Session. Das ist der Normalfall für Analysen.
- **`execute_sql`** — vollständige SQL-Ausführung inklusive `INSERT`, `UPDATE`, `DELETE` und DDL. Funktioniert **nur**, wenn `X-Allow-Write` auf `true` steht (Standard: `false`).
- **`get_database_schema`** — Tabellen und Spalten inspizieren, bevor eine Abfrage geschrieben wird.

## Unterstützte Datenbanken

| Client | Wert für `X-Database-Client` |
| --- | --- |
| PostgreSQL | `postgres` |
| MySQL | `mysql` |
| Microsoft SQL Server | `mssql` |

Andere Systeme — etwa SQLite — sind nicht angebunden.

## Einrichtung

Das Datenbank-Tool ist ein eingebautes Werkzeug. Im Assistenten-Editor aktivierst Du es in der **Werkzeuge**-Sektion und hinterlegst dort seine Konfiguration.

| Schlüssel | Pflicht | Bedeutung |
| --- | --- | --- |
| `X-Database-URL` | ja | Verbindungsstring zur Zieldatenbank. Wird als Secret gespeichert. |
| `X-Database-Client` | nein | Client explizit setzen (`postgres`, `mysql`, `mssql`), falls er sich nicht aus der URL ergibt. |
| `X-Max-Rows` | nein | Harte Obergrenze für zurückgegebene Zeilen (Standard: 5000). |
| `X-Allow-Write` | nein | Schreibende Operationen über `execute_sql` erlauben. Standard: `false`. |

Ohne `X-Database-URL` bricht jeder Aufruf mit „Missing database URL" ab. Über den Verbindungstest im Editor lässt sich die Konfiguration prüfen, bevor der Assistent produktiv geht.

## Fehlerbehebung bei Verbindungsproblemen

Der Verbindungstest baut eine direkte TCP-Verbindung zur Zieldatenbank auf — ohne Proxy oder Zwischenschicht. Die häufigsten Ursachen für „Verbindung fehlgeschlagen", wenn die Zugangsdaten korrekt sind:

- **Nur die IP-Adresse freigeschaltet, aber kein Port-Forwarding.** Eine Firewall-Regel für die meinGPT-IPs (siehe [IP-Freischaltung](/docs/integrations/connections-cloud-on-prem/ip-allowlisting)) reicht allein nicht — der Zielport muss zusätzlich per NAT/Port-Forwarding von außen erreichbar sein. Prüfe das mit einem Verbindungstest von außerhalb Deines Netzwerks auf genau Host und Port.
- **MSSQL mit benanntem Server-Instance statt fester Portnummer.** Ein benannter SQL-Server-Instance-Name (`SERVER\INSTANZ`) löst den tatsächlichen Port dynamisch über den SQL Server Browser Service auf UDP 1434 auf. Ist UDP 1434 nicht erreichbar oder der Browser-Dienst deaktiviert, schlägt die Auflösung fehl — verwende stattdessen die feste TCP-Portnummer der Instanz direkt in der Verbindungs-URL.
- **Datenbankbenutzer ohne Remote-Login-Recht.** Der Benutzer aus `X-Database-URL` braucht explizite Berechtigung für Verbindungen von außerhalb `localhost` (bei MSSQL z. B. eine Server-Login- statt reine Datenbank-Berechtigung).
- **TLS ist bei MSSQL immer aktiv und nicht abschaltbar.** Die Verbindung zu Microsoft SQL Server läuft grundsätzlich verschlüsselt (`encrypt: true`) mit vertrauenswürdigem Server-Zertifikat — dafür gibt es kein Konfigurationsfeld zum Deaktivieren. Ein Server, der nur unverschlüsseltes TDS anbietet oder ein selbstsigniertes Zertifikat mit inkompatiblen Parametern nutzt, kann die Verhandlung scheitern lassen.
- **Reverse Proxies vor der Datenbank.** Ein HTTP(S)-Reverse-Proxy kann kein rohes Datenbankprotokoll (PostgreSQL-, MySQL- oder TDS-Wire-Protocol) durchreichen. Zwischen meinGPT und der Datenbank darf nur eine reine TCP-Weiterleitung liegen, kein Layer-7-Proxy.

## Was das Tool selbst begrenzt — und was nicht

Das Tool erzwingt genau zwei Dinge:

- **Read-only-Trennung:** `query_database_readonly` weist alles ab, was nicht mit `SELECT`, `SHOW`, `DESCRIBE`, `EXPLAIN`, `PRAGMA` oder `WITH` beginnt, und setzt die Session read-only.
- **Grenzen gegen Ausreißer:** ein Statement-Timeout von 30 Sekunden und die Zeilenobergrenze aus `X-Max-Rows`.

Alles andere musst Du **in der Datenbank** durchsetzen. Es gibt keine
Konfiguration für erlaubte Schemata, Tabellen oder Spalten — wer
`X-Allow-Write` aktiviert, erlaubt dem Assistenten jede Anweisung, die der
Datenbankbenutzer ausführen darf.

## Zugriff richtig einschränken

Die Berechtigungen liegen beim Datenbankbenutzer, mit dem Du Dich verbindest. Drei Bausteine reichen für die meisten Fälle:

**1. Ein eigener Benutzer, der nur lesen darf**

```sql
CREATE USER mgpt_reader WITH PASSWORD 'ein-starkes-passwort';
GRANT CONNECT ON DATABASE meine_db TO mgpt_reader;
GRANT USAGE ON SCHEMA public TO mgpt_reader;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mgpt_reader;
```

**2. Views statt Rohtabellen, wo Spalten sensibel sind**

```sql
CREATE VIEW kunden_sicht AS
SELECT id, name, email, land
FROM kunden;
-- ausgeschlossen: steuernummer, bankverbindung, …
```

**3. Row Level Security, wenn Zeilen je Mandant getrennt bleiben müssen**

Damit gilt die Einschränkung unabhängig davon, welche Abfrage der Assistent formuliert.

## Beispiele

**„Was waren letztes Quartal unsere zehn umsatzstärksten Produkte?"**

```sql
SELECT p.product_name,
       SUM(s.quantity * s.unit_price) AS revenue,
       COUNT(DISTINCT s.order_id) AS order_count
FROM sales s
JOIN products p ON s.product_id = p.id
WHERE s.order_date >= '2026-01-01'
  AND s.order_date < '2026-04-01'
GROUP BY p.product_name
ORDER BY revenue DESC
LIMIT 10;
```

**„Prüf die Bestelltabelle auf Datenqualitätsprobleme."**

```sql
SELECT COUNT(*) AS total_rows,
       COUNT(*) FILTER (WHERE customer_id IS NULL) AS null_customers,
       COUNT(*) FILTER (WHERE order_date IS NULL) AS null_dates,
       COUNT(*) FILTER (WHERE total_amount < 0) AS negative_amounts
FROM orders;
```

Der Assistent formuliert die Abfrage, führt sie aus und erklärt das Ergebnis. Bei unbekannten Strukturen sieht er sich vorher mit `get_database_schema` das Schema an.

## Empfehlungen für den Betrieb

- **Read-only als Standard.** `X-Allow-Write` nur dort einschalten, wo ein Assistent wirklich schreiben soll — und dann mit einem Datenbankbenutzer, der nur die dafür nötigen Rechte hat.
- **Indizes für die häufigen Muster.** Das 30-Sekunden-Timeout trifft sonst zuerst die interessanten Abfragen.
- **Vorberechnete Views** für wiederkehrende Auswertungen, statt jedes Mal über die Rohdaten zu aggregieren.
- **`X-Max-Rows` bewusst setzen**, wenn Tabellen groß sind: der Standard von 5000 Zeilen ist eine Obergrenze, kein Richtwert.

## Weiterlesen

- [Werkzeuge und Connectors im Überblick](/docs/integrations/connectors)
- [Datenbanken anbinden](/docs/integrations/databases-overview)
- [Trust Center](/trust-center)
