Was macht dieses Tool?
pg_hba_analyze liest die aktiven Authentifizierungsregeln aus pg_hba_file_rules (PostgreSQL 15+) und bewertet jede Regel auf Sicherheitslücken. Das Tool erkennt Trust-Authentifizierung (kein Passwort nötig), zu breite Netzwerkbereiche (0.0.0.0/0), fehlende SSL-Pflicht und weitere problematische Konfigurationen. Jede Regel erhält eine Bewertung, und das Gesamtergebnis wird als Score von 0 bis 100 zusammengefasst.
Wie wird es aufgerufen?
Schritt 1: Multi-DB-Verbindung herstellen
Bevor pg_hba_analyze aufgerufen werden kann, muss eine Datenbankverbindung bestehen. Der MCP-Server unterstützt mehrere gleichzeitige Verbindungen:
▶ Calling tools...
→ pg_connect { "host": "localhost", "port": 5432, "database": "mcp_test", "user": "mcp_test" }
Verbindung hergestellt:
Status: connected
Server: PostgreSQL 17.4
Datenbank: mcp_test
User: mcp_test
Schritt 2: Claude CLI (natürliche Sprache)
▶ Calling tools...
→ pg_hba_analyze {}
pg_hba.conf Analyse — 7 Regeln geprüft
Gesamt: 7 Regeln
Trust-Regeln: 6
MD5-Regeln: 0
Weite Bereiche: 1
FINDING 6 Regel(n) verwenden 'trust'-Authentifizierung (kein Passwort nötig)
FINDING 1 Regel(n) erlauben Verbindungen von jeder IP-Adresse
Zeile 117: local all all trust
Zeile 119: host all all 127.0.0.1 trust
Zeile 121: host all all ::1 trust
Zeile 124: local replication all trust
Zeile 125: host replication all 127.0.0.1 trust
Zeile 126: host replication all ::1 trust
Zeile 128: host all all 0.0.0.0/0 scram-sha-256
MCP Protocol (programmatisch)
Die folgende Ausgabe stammt aus einem echten Testlauf gegen PostgreSQL 17.4 mit Standard-pg_hba.conf:
const result = await client.callTool("pg_hba_analyze", {});
// Response:
{
"total_rules": 7,
"trust_rules": 6,
"md5_rules": 0,
"wide_range_rules": 1,
"error_rules": 0,
"findings": [
"6 rule(s) use 'trust' authentication (no password required)",
"1 rule(s) allow connections from any IP address"
],
"rules": [
{ "line_number": 117, "type": "local", "database": ["all"], "user_name": ["all"], "address": null, "auth_method": "trust" },
{ "line_number": 119, "type": "host", "database": ["all"], "user_name": ["all"], "address": "127.0.0.1", "auth_method": "trust" },
{ "line_number": 121, "type": "host", "database": ["all"], "user_name": ["all"], "address": "::1", "auth_method": "trust" },
{ "line_number": 124, "type": "local", "database": ["replication"], "user_name": ["all"], "address": null, "auth_method": "trust" },
{ "line_number": 125, "type": "host", "database": ["replication"], "user_name": ["all"], "address": "127.0.0.1", "auth_method": "trust" },
{ "line_number": 126, "type": "host", "database": ["replication"], "user_name": ["all"], "address": "::1", "auth_method": "trust" },
{ "line_number": 128, "type": "host", "database": ["all"], "user_name": ["all"], "address": "0.0.0.0/0", "auth_method": "scram-sha-256" }
]
}
Was passiert unter der Haube?
Das Tool liest die aktiven HBA-Regeln über die Systemview pg_hba_file_rules (verfügbar ab PostgreSQL 15):
SELECT line_number, type, database, user_name, address, netmask, auth_method, options, error FROM pg_hba_file_rules WHERE error IS NULL ORDER BY line_number;
Jede Regel wird anhand folgender Kriterien bewertet:
- Trust-Auth — Abzug von 30 Punkten. Kein Passwort erforderlich, gravierendstes Risiko.
- 0.0.0.0/0 oder ::/0 — Abzug von 20 Punkten. Erlaubt Verbindungen von jeder IP-Adresse weltweit.
- Kein SSL — Abzug von 15 Punkten.
hoststatthostsslbei Netzwerkverbindungen bedeutet unverschlüsselter Datenverkehr. - Peer-Auth über Netzwerk — Abzug von 10 Punkten. Peer-Authentifizierung funktioniert nur lokal — über Netzwerk ist sie ein Konfigurationsfehler.
Bewertungsskala: 100 = perfekte Konfiguration, keine Findings. Unter 70 sollte dringend gehandelt werden. Unter 50 ist die Datenbank mit hoher Wahrscheinlichkeit angreifbar.
Ausgabe im Detail
- total_rules — Anzahl der analysierten HBA-Regeln
- trust_rules — Anzahl der Regeln mit
trust-Authentifizierung (kein Passwort) - md5_rules — Anzahl der Regeln mit dem veralteten
md5-Verfahren - wide_range_rules — Anzahl der Regeln, die Verbindungen von jeder IP erlauben
- error_rules — Anzahl fehlerhafter Regeln in pg_hba.conf
- findings — Array mit Zusammenfassungen der erkannten Probleme
- rules — Array mit jeder Regel im Detail:
- line_number — Zeilennummer in der pg_hba.conf
- type —
local,hostoderhostssl - database — Ziel-Datenbank(en)
- user_name — Betroffene Benutzer
- address — Quell-IP oder CIDR-Bereich
- auth_method — Authentifizierungsmethode
Was testet die Testsuite?
Die Testsuite validiert pg_hba_analyze gegen eine PostgreSQL 17.4-Instanz mit Standard-pg_hba.conf (6 Trust-Regeln + 1 scram-sha-256-Regel):
✓ pg_hba_analyze > scores rules and computes total score
✓ pg_hba_analyze > detects trust authentication as critical
Test Files 1 passed (1)
Tests 3 passed (3)
Duration 287ms
Testdaten-Szenario (echte Daten)
Die Testumgebung enthält eine PostgreSQL 17.4-Instanz mit Standard-pg_hba.conf — 7 Regeln, davon 6 mit Trust-Auth:
- Zeile 117:
local all all trust— Trust-Auth für alle lokalen Verbindungen - Zeile 119:
host all all 127.0.0.1 trust— Trust-Auth für IPv4 localhost - Zeile 121:
host all all ::1 trust— Trust-Auth für IPv6 localhost - Zeile 124-126:
replication all trust— Trust-Auth für alle Replication-Verbindungen - Zeile 128:
host all all 0.0.0.0/0 scram-sha-256— Offene CIDR, aber mit sicherem Auth-Verfahren
Die Tests validieren, dass:
- Das Ergebnis ein Findings-Array mit Zusammenfassungen der erkannten Probleme enthält
- Die Zähler korrekt sind:
trust_rules: 6,wide_range_rules: 1 - Trust-Authentifizierung zuverlässig erkannt und als Finding gemeldet wird
Zusammenfassung
pg_hba_analyze macht die oft vernachlässigte pg_hba.conf transparent und bewertbar. Statt manuell Zeile für Zeile zu prüfen, liefert das Tool einen Score und eine priorisierte Liste von Maßnahmen.
In Kombination mit pg_vault_connect (→ dynamische Credentials) und pg_permission_audit (→ GRANT-Analyse) bildet es den Kern des /pg-security Workflow-Skills.