antrophiclove
← Kütüphaneye dön
0

Üretim veritabanına yazmayı engelleyen hook

Claude yanlışlıkla canlı veritabanına DROP/DELETE/TRUNCATE çalıştırmasın diye komutu çalışmadan önce durduran kanca. CLAUDE.md'ye 'dikkatli ol' yazmaktan farkı: bu, Claude'un kararından bağımsız çalışır.

yazan kuscubasiece·8 Eylül 2026

Kaynak: Claude Code dokümantasyonu

Kurulum
curl -sL https://www.antrophiclove.com/api/kaynak/uretim-veritabanina-yazmayi-engelleyen-hook/raw

Bu içerik mevcut dosyaya elle harmanlanmalı: .claude/settings.json

# .claude/settings.json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/db-guard.sh",
            "statusMessage": "Veritabanı komutu denetleniyor..."
          }
        ]
      }
    ]
  }
}

# .claude/hooks/db-guard.sh   (chmod +x)
#!/bin/bash
CMD=$(jq -r '.tool_input.command // ""')

# Canlı bağlantı dizesi geçiyor mu?
if echo "$CMD" | grep -qiE '(prod|production|live)[-_.]?(db|database)|@db\.[a-z0-9]+\.supabase\.co|amazonaws\.com:5432'; then
  # Yıkıcı ifade var mı?
  if echo "$CMD" | grep -qiE '\b(drop|truncate|delete from|alter table .* drop)\b'; then
    jq -n '{
      hookSpecificOutput: {
        hookEventName: "PreToolUse",
        permissionDecision: "deny",
        permissionDecisionReason: "Canlı veritabanında yıkıcı ifade engellendi. Önce staging kopyasında dene."
      }
    }'
    exit 0
  fi

  # Yıkıcı değil ama yine de canlıya dokunuyor: onay iste
  jq -n '{
    hookSpecificOutput: {
      hookEventName: "PreToolUse",
      permissionDecision: "ask",
      permissionDecisionReason: "Bu komut canlı veritabanına bağlanıyor."
    }
  }'
  exit 0
fi

exit 0   # karar yok, normal izin akışı işler

## Not
Hook kararı izin kurallarını baypas etmez: eşleşen bir deny kuralı,
hook "allow" dese bile komutu durdurur.