DB Hooks

Security-Hooks die direkte Datenbankzugriffe blockieren und MCP-Server erzwingen.

Pfad/opt/scripts/hooks/
Hook-TypPreToolUse (Bash)
VerhaltenBlocking (Exit 1 bei Violation)

Übersicht

HookBlockiertEmpfehlung
block_direct_db.pymysql/mariadb mit PasswortMCP-DB Tools
block_direct_task_db.pyINSERT/UPDATE/DELETE auf Task-TabellenMCP-Tasks Tools

block_direct_db.py

Verhindert Bash-Befehle mit direktem Datenbank-Login.

Blockierte Patterns

mysql -u user -ppassword
mariadb -u user -p
mysql --password=xxx
mariadb --password=xxx

Fehlermeldung

BLOCKIERT: Direkte Datenbankzugriffe sind aus Sicherheitsgründen nicht erlaubt.

Verwende stattdessen die MCP-DB Tools:
  - db_select(query, params)  : SELECT-Abfragen ausführen
  - db_schema()               : Datenbank-Schema anzeigen
  - db_stats()                : Statistiken abrufen

Vorteile von MCP-DB:
  - Keine Credentials im Code/Verlauf
  - Automatische Query-Validierung
  - SQL-Injection Schutz
  - Audit-Logging aller Abfragen
  - Enforced Read-Only Zugriff

block_direct_task_db.py

Verhindert direkte SQL-Operationen auf Task-Tabellen.

Blockierte Patterns

INSERT INTO tasks ...
UPDATE tasks SET ...
DELETE FROM tasks ...
INSERT INTO task_assignments ...
UPDATE task_results ...
DELETE FROM task_comments ...

Fehlermeldung

BLOCKIERT: Direkte SQL-Operationen auf Task-Tabellen sind nicht erlaubt.

Verwende stattdessen die MCP-Tasks Tools:
  - tasks_list()              : Tasks auflisten
  - tasks_create(title, ...)  : Task erstellen
  - tasks_get(id)             : Task-Details abrufen
  - tasks_update(id, ...)     : Task aktualisieren
  - tasks_status(id, status)  : Status ändern
  - tasks_assign(id, ...)     : Task zuweisen
  - tasks_result(id, ...)     : Ergebnis speichern
  - tasks_execute(id, model)  : Mit Ollama ausführen

Verhalten

Erfolg (erlaubt)

{
  "allowed": true,
  "message": ""
}
Exit Code: 0

Blockiert

{
  "allowed": false,
  "message": "BLOCKIERT: ..."
}
Exit Code: 1

Fehler (Fail-Open)

{
  "allowed": true,
  "message": "Hook error (fail-open): ..."
}
Exit Code: 0

Konfiguration

In .claude/settings.local.json:

{
  "hooks": {
    "PreToolUse": [
      "/opt/scripts/hooks/block_direct_db.py",
      "/opt/scripts/hooks/block_direct_task_db.py"
    ]
  }
}

Sicherheitskonzept

┌─────────────────────────────────────────────┐
│  Claude Code                                │
│  └─ Bash Tool → mysql -u root -p...         │
└─────────────────────────────────────────────┘
              ↓
┌─────────────────────────────────────────────┐
│  PreToolUse Hook                            │
│  └─ block_direct_db.py                      │
│     └─ Pattern Match? → BLOCK (Exit 1)      │
└─────────────────────────────────────────────┘
              ↓
┌─────────────────────────────────────────────┐
│  MCP-Server (stattdessen)                   │
│  ├─ MCP-DB: db_select(), db_schema()        │
│  └─ MCP-Tasks: tasks_*(), quality_*()       │
└─────────────────────────────────────────────┘

Verwandte Dokumentation