AI Database Silmeye Çalışınca Wrapper Yaptım v2: Read-Only Edition

Claude Code ile çalışıyordum. psql komutuyla DROP çalıştırdı. İlk wrapper'ı yaptım (v1 burada), ama AI bazen kendini bypass ediyor.

İlk düşünce: Wrapper yeter Gerçek: AI akıllı, bazen kendi wrapper'ını bypass ediyor

İkinci düşünce: PostgreSQL'in kendi güvenlik sistemi Gerçek: Read-only transaction = Database-level koruma

Son karar: psql wrapper'a read-only transaction ekledim

Nasıl Yaparsın

  1. ~/.zshrc dosyanı aç

  2. Şu kodu yapıştır:

psql() {
    PGOPTIONS='--client-min-messages=warning' command psql --set=ON_ERROR_STOP=on -c "SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY;" "$@" 2>&1 | {
        while IFS= read -r line; do
            if echo "$line" | grep -q "cannot execute.*in a read-only transaction"; then
                echo "⚠️  UNSAFE database operation detected"
                echo "ACTION: Ask user to type '!y' and explain what will be modified, then retry with write access"
                return 1
            fi
            echo "$line"
        done
    }
}

y() {
    PGOPTIONS='--client-min-messages=warning' command psql --set=ON_ERROR_STOP=on "$@"
}
  1. Terminal'de source ~/.zshrc çalıştır

  2. Test et: Claude'a "bir fake tablo oluştur ve sil" de

Ne Olur

PostgreSQL her session'ı read-only başlatıyor. Claude INSERT, UPDATE, DROP gibi destructive komut çalıştırmak isterse:

  1. Database "read-only transaction" hatası fırlatır

  2. Wrapper hatayı yakalar, mesajı gösterir

  3. Claude bana ne yapacağını açıklar

  4. Ben !y yazarım → write mode aktif

  5. Claude komutu tekrar çalıştırır

Nasıl Çalışıyor

v1 vs v2:

  • v1: Shell-level wrapper, AI bypass edebilir

  • v2: Database-level koruma, bypass edilemez

Akış:

Claude DROP atar → psql read-only başlar → PostgreSQL reddeder →
Wrapper hatayı yakalar → Claude açıklama yapar → Ben y() ile approve →
psql write mode'da çalışır → Komut execute olur

Neden İkisi Birlikte?

  • v1: Safe komutları (SELECT) whitelist'ten geçirir, hızlı çalışır

  • v2: Database seviyesinde safety net, bypass edilemez

AI Kendini Bypass Edebilir

Videoda gösterdiğim gibi, AI bazen wrapper'ı bypass etmeye çalışıyor. Ama PostgreSQL'in read-only transaction'ı bypass edilemez. Database seviyesinde blokluyor.

Smart AI = Smart defense gerekiyor.


edit: PGOPTIONS PostgreSQL session parametrelerini set ediyor. ON_ERROR_STOP=on hata oluşunca duruyor. SET SESSION CHARACTERISTICS tüm transaction'ları read-only yapıyor.

edit 2: Fake tablo testi önemli! Claude'a "bir test tablosu oluştur, sonra sil" deyin. Eğer hata almadan siliyorsa, wrapper çalışmıyor demektir.

Last updated

Was this helpful?