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
~/.zshrc
dosyanı açŞ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 "$@"
}
Terminal'de
source ~/.zshrc
çalıştırTest 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:
Database "read-only transaction" hatası fırlatır
Wrapper hatayı yakalar, mesajı gösterir
Claude bana ne yapacağını açıklar
Ben
!y
yazarım → write mode aktifClaude 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?