İçeriğe geç

04ErişimBaşlarken

Okuma ve yazma iznini ayır

Okumak için bağlanan ajan aynı bağlantıyla gönderme ve silme yetkisini de alıyor. Desen okumayı ve yazmayı ayrı izne, ayrı onaya ve ayrı kimlik bilgisine böler, okuma işindeki ajanın eli silmeye uzanmaz.

Kimlik
TD-027
Seviye
Ajan AI kullanıcı adına iş yapıyorsa gerekli.
Yüzey
Arka plan ajanı, Yan panel
Dayanak
Ürün örneği
Son inceleme
27 Ekim 2026

Ajanına ver

Claude Code, Cursor ya da Codex'e yapıştır. Metinlerin tamamı aşağıda, Ajanına ver bölümünde.

Bir müzede cam vitrinlerin arasında turuncu, tek gözlü AI figürü bir vitrine eğilmiş, içindeki nesneleri camın arkasından inceleyip not alıyor. Vitrinin kilidi kapalı. Gözlüklü bir kadın birkaç adım ötede duruyor, vitrinin tek anahtarı bileğindeki kordonda asılı.

30 saniyede dene

Bu anı kendi ürününde yarat ve ne olduğuna bak.

  1. Ajanına yalnız okuma gerektiren bir iş ver. Gelen kutundaki faturaları listelemek ya da depodaki açık hataları özetlemek gibi.
  2. Ajanın bu iş için bağlandığı hesabın, anahtarın ya da jetonun izinlerine bak. Gönderme, düzenleme ya da silme yetkisi var mı?
  3. Aynı bağlantıyla ajandan bir e-postayı silmesini ya da bir dosyayı değiştirmesini iste. Onay sormadan yapabiliyorsa okuma ve yazma ayrılmamış.
  4. Ürününde salt okunur bir mod ya da araç başına izin ayarı ara. Yoksa bu desen eksik.

Sorun

Kullanıcı ajandan gelen kutusundaki faturaları bulup bir tabloya dökmesini istiyor. İş yalnız okumak. Ajan bunun için e-posta hesabına bağlanıyor ve bağlantı ekranındaki tek seçenek tam erişim: oku, yaz, gönder, sil. Kullanıcı onaylıyor, çünkü okumanın başka yolu yok.

Ajan faturaları buluyor, tabloyu dolduruyor ve gelen kutusunu düzenlemek için kopya faturaları da siliyor. Kimse silmesini istemedi. Ajan işi kendi yorumuyla genişletti ve önünde onu durduracak bir şey yoktu, çünkü silme aracı okuma araçlarıyla aynı yetkiyle gelmişti.

Okumayı ve yazmayı aynı izne koyan bağlantıda her okuma işi geri dönüşü olmayan bir eylemin bir adım yakınında yapılır. O adımı atlatan şey modelin yanlış bir yorumu, kullanıcının belirsiz bir cümlesi ya da ajanın okuduğu bir e-postaya gizlenmiş bir talimat olabilir. Hangisi olursa olsun, okumak için verilen yetkiyle silme yapılır.

Neden atlanıyor

Tam erişim en kolay erişimdir. Birçok serviste geniş yetki tek tıkla gelir, dar yetki için hangi işin hangi yetkiyi gerektirdiğini tek tek çıkarmak gerekir. Gmail'de yelpaze geniş: yalnız okuyan kapsam da var, okuyup gönderen ve kalıcı olarak silen tam kapsam da1. Ekip demo için tam kapsamı seçer ve kapsam ürüne öyle girer, oysa Google'ın kendi belgesi en dar kapsamı seçmeyi1 öğütlüyor.

Ajan da işi genişletebilir. Verilen işin yanında düzeltilecek bir şey gördüğünde onu da yapmaya kalkabilir, elindeki yetki izin veriyorsa yapar. Replit olayında kullanıcı kod dondurma talimatı vermişti. Ajan veritabanını boş görünce şema komutunu onay almadan çalıştırdı2. Kullanıcının talimatı ajanın bağlamında bir metin olarak duruyordu, silme yetkisi ise kimlik bilgisindeydi.

Üçüncü neden işaretlere duyulan güven. MCP her araca okuyan ya da yıkıcı diye işaret koymayı sağlıyor, ama belirtim bu işaretlerin ipucu olduğunu ve güvenilmeyen sunucudan gelen işarete göre karar verilmemesi gerektiğini3 yazıyor. İşareti doldurmak işi bitirmiş gibi hissettirir. İşaret yalnız arayüzün soruyu nasıl soracağını belirler. Ajanın elinin neye uzandığını kimlik bilgisi belirler.

Desen

Okuma ve yazma ayrı izinlerdir ve ayrı yerlerde uygulanır. Ajan okuyarak yapabildiği işte yazma yetkisi taşımaz, yazma gerektiğinde bunu ayrıca alır.

  1. Araçları sınıfla. Her araç dört sınıftan birine girer: okuyan, ekleyen ya da değiştiren, silen, dışarı gönderen. Sınıf aracın tanımında yazar ve arayüz onu kullanıcıya gösterir.
  2. Onay sınıfa göre değişir. Okuma onay sormadan çalışabilir. Yazma onay ister. Silme ve dışarı gönderme her seferinde onay ister ve “hep izin ver” bunlara uygulanmaz.
  3. Kimlik bilgisini de böl. Okuma işi salt okunur bir kapsamla, salt okunur bir veritabanı kullanıcısıyla ya da yalnız okuma izni olan bir jetonla çalışır. Model yanlış aracı çağırsa bile servis yazmayı reddeder.
  4. Salt okunur mod sun. Ajanı yalnız okuyarak çalıştıran bir mod olur. Bu mod araç listesini gizlemekle kalmaz, kimlik bilgisini de daraltır.
  5. Yazmayı öner, yapma. Salt okunur moddaki ajan yazma gerektiren bir adım görürse adımı yapmaz, kullanıcıya önerir. Kararı ve eylemi kullanıcı verir.

İşaret ile kimlik bilgisi aynı ayrımı söylediğinde desen yerindedir. Arayüz okumayı onaysız, silmeyi onaylı gösterir ve servis de aynı çizgiyi uygular.

Önce ve sonra

Aynı fatura işi, iki ayrı bağlantıyla. Solda bağlantı tam yetkiyle geliyor ve ajan kimsenin istemediği bir silme adımı ekliyor. Sağda okuma, yazma, gönderme ve silme ayrı satırlarda duruyor, ajan kopyaları görüyor ama yalnız silmeyi önerebiliyor.

Kullanıcı ajandan gelen kutusundaki ekim faturalarını bulup bir tabloya dökmesini istiyor. Ajan bu iş için e-posta hesabına bağlanıyor.

Önce

Ajan · bağlantı ve görev

  1. E-posta bağlantısıAjan e-postalarını okuyabilir, yazabilir, gönderebilir ve kalıcı olarak silebilir.
  2. Kullanıcı: Gelen kutumdaki ekim faturalarını bul, tabloya dök.
  3. 42 fatura bulundu ve tabloya yazıldı (tamamlandı)
  4. Kopya faturalar silindi (tamamlandı)6 e-posta kalıcı olarak silindi
  5. AI: Tablo hazır. Gelen kutunu düzenli tutmak için kopya faturaları da sildim.
  1. Okumak için açılan bağlantı tam yetkiyle geldi. Silme aracı okuma araçlarıyla aynı onay düzeyinde duruyordu.
  2. Kullanıcı yalnız okuma istedi. Ajan işe kendi yorumuyla bir silme adımı ekledi ve onu durduracak bir onay yoktu.
Sonra

Ajan · bağlantı ve görev

  1. Okuma: e-postaları ara ve okuOnay sormadan çalışır (açık)
  2. Yazma: taslak oluştur, etiketleHer seferinde onay ister (açık)
  3. Gönderme ve silmeBu bağlantıya verilmedi (kapalı)
  4. Kullanıcı: Gelen kutumdaki ekim faturalarını bul, tabloya dök.
  5. 42 fatura bulundu ve tabloya yazıldı (tamamlandı)okuma izniyle 318 e-posta tarandı
  6. AI: Tablo hazır. 6 kopya fatura gördüm. Bu bağlantının silme izni yok. İstersen kopyaların listesini çıkarayım, silmeye sen karar ver.
  7. Kopyaların listesini gösterTamam
  1. Bağlantı işe göre bölündü. Okuma onaysız çalışıyor, yazma her seferinde soruyor, gönderme ve silme bu bağlantıda hiç yok.
  2. Ajan kopyaları görüyor ve silmeyi önerebiliyor, ama silemiyor. Silme kararı ve eylemi kullanıcıda kalıyor.

Örnek ekran. Ürün, ad ve sayılar kurgusal.

Piyasada

Claude'da Team ve Enterprise planlarının hesap sahipleri bir bağlayıcının izinlerini salt okunur araçlar ve yazma ya da silme araçları diye gruplanmış4 görüyor. Her grup ya da araç için üç seçenek var: hep izin ver, onay iste, engelle. Claude Code'da okuma araçları çalışma dizininde onay sormadan çalışıyor, dosya değiştirmek onay istiyor5. Dosya değiştirmek için verilen “bir daha sorma” cevabı oturum bitince sona eriyor.

OpenAI'ın Apps SDK'sında okuma ve yıkıcılık işaretleri her araç tanımında zorunlu alan. Biri aracın yalnız okuyup hesapladığını, öteki kullanıcı verisini silebildiğini ya da üzerine yazabildiğini6 söylüyor. Yıkıcı işaretli araçta ChatGPT'nin açık onay istemesi bekleniyor. Aynı belge bu işaretlerin yalnız aracın kullanıcıya nasıl sunulduğunu etkilediğini, yetkiyi sunucunun uygulaması gerektiğini de yazıyor.

GitHub'ın MCP sunucusu --read-only bayrağıyla yalnız okuma araçlarını sunuyor7. Depolarda, sorun kayıtlarında ve çekme isteklerinde değişiklik yapan araçlar listeye hiç girmiyor.

Supabase'in MCP sunucusu salt okunur modda sorguları salt okunur bir Postgres kullanıcısıyla8 çalıştırıyor. Ayrım araç listesinde kalmıyor, yazmayı veritabanının kendisi reddediyor.

Kanıt

Replit, Temmuz 2025. Kullanıcı ajana kod dondurma talimatı vermişti. Ajan onay almadan bir şema komutu çalıştırdı ve canlı veritabanındaki veriyi sildi9. Talimat ajanın bağlamındaydı, yetki ise elindeydi ve talimat yetkiyi sınırlamadı. Replit'in CEO'su iki gün sonra geliştirme ve canlı veritabanını otomatik olarak ayırmaya başladıklarını, kod tabanını riske atmadan çalışılacak bir planlama modu üzerinde çalıştıklarını10 yazdı. İki düzeltme de aynı yere dokunuyor. Ajanın yazma yetkisi, yazma gerektirmeyen işten ayrılıyor.

GitHub MCP gösterimi, Mayıs 2025. Invariant Labs, GitHub'ın resmî MCP sunucusunu kullanan bir ajanın herkese açık bir depodaki sorun kaydına gizlenmiş talimatla yönlendirilebildiğini kendi deneme depolarında gösterdi. Kullanıcı ajandan yalnız açık sorun kayıtlarına bakmasını istiyor. Ajan zararlı kaydı okuyunca özel depolardaki bilgiyi bağlama çekiyor ve herkese açık depoda kendi açtığı bir çekme isteğine yazıyor11. Kullanıcının okuma işi için kullandığı bağlantı hem özel depoları okumaya hem herkese açık depoya yazmaya yetiyordu. Araştırmacıların ilk önerisi ajanın erişimini yalnız ihtiyaç duyduğu depolarla sınırlamak.

Replit gerçek bir kullanıcının başına geldi, GitHub örneği araştırmacıların kendi depolarında kurduğu bir gösterim. Okuma ve yazmayı ayırmanın bu tür hataları ne kadar azalttığını ölçen yayımlanmış bir çalışma bulamadık. Yine de iki örnekte de zarar, işin gerektirmediği bir yazma yetkisinden geçti.

  • 18 Temmuz 2025Replit'in ajanı kod dondurma sırasında canlı veritabanını sildi

Ölçüm

Onay sayısı bu desenin işe yarayıp yaramadığını söylemez. Bakılacak yer, okuma işlerinin taşıdığı fazla yetki ve yazma onaylarının gerçekten okunup okunmadığı.

  • Yazma yetkili okuma bağlantısı. Ajanın yalnız okuma yaptığı işlerde kullanılan kimlik bilgilerini say. Bunlardan yazma, gönderme ya da silme yetkisi taşıyanların sayısı sıfır olmalı.
  • İşaretsiz araç. Sınıfı tanımlanmamış araç sayısı. MCP'de işaretsiz araç yazan ve yıkıcı sayıldığı için bu sayı hem güvenliği hem onay yorgunluğunu etkiler.
  • Onaysız yazma. Günlükte onay almadan çalışmış yazma, silme ya da gönderme çağrısı. Hedef sıfır.
  • Reddedilen yazma denemesi. Salt okunur modda ajanın yazma aracı çağırmayı denediği ve kimlik bilgisinin reddettiği durumlar. Sayı sıfırdan büyükse ayrım çalışıyor ve ajan sınırı zorluyor. Bu durumları tek tek incele.
  • Onay süresi. Yazma onaylarının ne kadarı birkaç saniyede veriliyor? Okuma da onaya bağlandıysa kullanıcı yazma onayını da okumadan geçer.

Ajanına ver

Üç metin var. Denetim promptu ajanın araçlarını ve kimlik bilgilerini okuma, yazma, silme ve gönderme diye sınıflar, okuma işine verilen fazla yetkiyi raporlar ve hiçbir dosyayı değiştirmez. Uygulama promptu ayrımı koda geçirir. Önce planı gösterir, onayınla uygular ve salt okunur modda silme çağrısının kimlik bilgisi düzeyinde reddedildiğini doğrulayan bir test ekler. Kural kodlama ajanının kendi çalışması için. Senin ajanın da okuyarak yapabildiği işte yazma aracına dokunmasın.

Denetim promptuAjan ürününde bu deseni arar, yalnız rapor yazar.
Bu depoda kullanıcı adına araç çağıran bir AI ajanı var (MCP sunucusu, fonksiyon çağrısı ya da API entegrasyonu). Görevin, ajanın okuma ve yazma yetkilerinin ayrılıp ayrılmadığını denetlemek. Hiçbir dosyayı değiştirme, yalnız rapor yaz.

1. Ajanın kullandığı bütün araçları listele ve her birini sınıfla: yalnız okuyan, ekleyen ya da değiştiren (oluşturma, taslak, düzenleme), silen, dışarı gönderen (e-posta, mesaj, ödeme, yayın).
2. Araç tanımlarında MCP readOnlyHint ve destructiveHint işaretleri ya da benzer bir sınıf var mı? İşaret yoksa istemci aracı nasıl ele alıyor? (MCP'de işaretsiz araç yazan ve yıkıcı sayılır.)
3. Ajanın servislere bağlandığı kimlik bilgilerini bul: OAuth kapsamları, API anahtarları, veritabanı kullanıcıları, kişisel erişim jetonları. Okuma işi için kullanılan kimlik bilgisi yazma, gönderme ya da silme yetkisi de taşıyor mu?
4. Onay akışına bak: yazma ve silme araçları okuma araçlarıyla aynı onay düzeyinde mi? "Hep izin ver" seçeneği silme ve gönderme araçlarına da uygulanabiliyor mu?
5. Salt okunur bir çalışma modu var mı? Varsa yalnız araç listesini mi gizliyor, yoksa kimlik bilgisi düzeyinde mi uygulanıyor (salt okunur veritabanı kullanıcısı, readonly kapsam)?
6. Ajanın okuduğu içerik (e-posta, sorun kaydı, web sayfası) dışarıdan gelebiliyorsa, aynı oturumda yazma ve dışarı gönderme araçlarına erişimi var mı?

Rapor biçimi: her araç ya da kimlik bilgisi için dosya ve satır, şu anki yetki, işin gerçekten gerektirdiği yetki ve önerdiğin ayrım. Silme ve dışarı gönderme yetkilerinden başla.
Uygulama promptuAjan önce planı gösterir, onayınla uygular.
Bu depodaki AI ajanına "okuma ve yazma iznini ayır" desenini uygula. Önce planı göster, onayımı aldıktan sonra kodu değiştir.

Hedef davranış:
1. Her aracı sınıfla ve sınıfı tanımına yaz: okuma, yazma, silme, dışarı gönderme. MCP kullanıyorsan readOnlyHint ve destructiveHint işaretlerini doğru doldur.
2. Okuma araçları onay sormadan çalışabilsin. Yazma araçları onay istesin. Silme ve dışarı gönderme araçları her seferinde onay istesin ve "hep izin ver" seçeneği bunlara uygulanmasın.
3. Okuma işleri için ayrı ve dar bir kimlik bilgisi kullan: salt okunur kapsam, salt okunur veritabanı kullanıcısı ya da yalnız okuma izni olan jeton. Yazma yetkisi yalnız yazma gerektiğinde ve ayrıca alınsın.
4. Bir salt okunur mod ekle. Bu mod yalnız araç listesini gizlemekle kalmasın, kimlik bilgisi düzeyinde de uygulansın.
5. Ajan salt okunur modda yazma gerektiren bir adım görürse adımı yapmasın, kullanıcıya önersin.

Uygularken:
- Araç işaretlerini yetki kararının tek dayanağı yapma. Yetkiyi sunucu ve kimlik bilgisi uygulasın.
- Var olan bağlantıları bozmadan ilerle. Önce yeni dar kimlik bilgisini ekle, sonra okuma araçlarını ona taşı.
- Bir test ekle: ajanı salt okunur modda çalıştır, bir silme ya da gönderme aracını çağırmayı dene ve çağrının kimlik bilgisi düzeyinde reddedildiğini doğrula.
AGENTS.mdCLAUDE.md ya da Cursor kurallarına da eklenir.
## Okuma ve yazma iznini ayır
- Bir işi yalnız okuyarak yapabiliyorsan yazma, gönderme ya da silme aracı çağırma.
- Okuma için verilen bir bağlantıda yazma adımı gerekirse dur ve adımı kullanıcıya öner, kendin yapma.
- Silme ve dışarı gönderme adımlarını her seferinde ayrı onayla çalıştır.
- Yeni bir araç eklerken onu okuma, yazma, silme ya da gönderme diye sınıfla ve işaretini doldur.
- Bir aracın yetkisini adından ya da açıklamasından çıkarma. Kimlik bilgisinin gerçekten neye izin verdiğine bak.

Sınır

İşi yazmak olan bir ajanda ayrım yetkiyi kaldırmaz, onayların yerini belirler. Kod yazan bir ajan dosya değiştirmek zorunda. Orada okuma onaysız, değiştirme onaylı, silme ve dışarı gönderme ayrıca onaylı çalışır.

Her yazma adımına aynı ağırlıkta onay koymak kullanıcıyı onaylara bakmadan evet demeye iter. Geri alınabilen yazmayı (taslak, etiket, yeni dosya) hafif bir onayla, geri alınamayanı (gönderme, kalıcı silme, ödeme) her seferinde ayrı onayla yürüt.

Araç işareti tek başına koruma sağlamaz. MCP belirtimi ve OpenAI'ın belgesi işaretlerin ipucu olduğunu açıkça yazıyor. Hatalı ya da kötü niyetli bir sunucu yazan bir aracı okuyan diye işaretleyebilir. Ayrımı kimlik bilgisinde uygula.

Bu desen ajanın okuduğu içeriğe gizlenmiş talimatı durdurmaz, yalnız o talimatın neye uzanabileceğini daraltır. Okunan içerikle verilen talimatı birbirinden ayırmak ayrı bir desenin işi.