Filtreler ve Duvarlar Arasındaki Fark

Verilerinize erişimi olan bir yapay zeka ajanı inşa ediyorsunuz. Güvenlik için iki seçeneğiniz var: Verileri filtreleyebilir veya onları duvarlarla örebilirsiniz.

Filtreleme, sorgunuzun yalnızca belirli satırları döndürmesi anlamına gelir. Duvar örmek ise ajanın gizli satırlara hiçbir şekilde ulaşamaması anlamına gelir.

Bir şeyler bozulana kadar bunlar aynı görünür.

Yakın zamanda 1,2 milyon kelimeyi bir bilgi tabanına dönüştüren bir sistem kurdum. Verileri yönetmek için Supabase kullandım. Yapay zeka ajanlarımın yalnızca herkese açık içeriği görmesini istedim.

Verileri filtrelemek için standart bir Postgres görünümü (view) kullandım:

CREATE VIEW public_seeds AS
  SELECT * FROM moments
  WHERE visibility = 'public'
    AND is_canonical = true;

Bu doğru görünüyor. Ancak devasa bir kusuru var. Varsayılan olarak, bir Postgres görünümü, onu çağıran kişi olarak değil, sahibi olarak çalışır. Görünüm sahibi genellikle tam erişime sahiptir. Bu, Satır Düzeyinde Güvenlik (RLS) politikalarınızın görünüm için geçerli olmadığı anlamına gelir.

Bir duvar inşa etmediniz. Bir filtre inşa ettiniz.

Eğer bir filtre başarısız olursa, yapay zeka ajanı bunu fark etmeyecektir. Bir insan hatayı veya yanlış veriyi görür. Bir ajan ise sadece aldığı şeyi işler. Filtreniz başarısız olursa, ajanınız uyarı vermeden özel verileri kullanmaya başlayacaktır.

Postgres 15, bunu security_invoker seçeneği ile çözdü.

security_invoker değerini true olarak ayarladığınızda, görünüm çağıran rol olarak çalışır. Bu, görünümü RLS politikalarınıza uymaya zorlar. Görünüm yapısal bir kapı haline gelir.

Doğru yöntem:

CREATE VIEW public_seeds
  WITH (security_invoker = true)
AS
  SELECT * FROM moments
  WHERE visibility = 'public'
    AND is_canonical = true;

Artık duvar yapısal. Bir geliştirici kötü bir sorgu veya bir join yazsa bile, RLS politikası tabloyu korur.

"Bu olmamalı" ifadesi, her şeyin mükemmel çalışmasına dayanır. "Bu olamaz" ifadesi ise mimarinize dayanır.

Yapay zeka için inşa ederken, gerçekleşemeyecek olan şeyler için tasarım yapmalısınız.

Kurulumunuzda kontrol etmeniz gereken üç şey:

Kaynak: https://dev.to/chadtdyar/the-difference-between-this-shouldnt-happen-and-this-cannot-happen-in-ai-content-pipelines-1g0p

İsteğe bağlı öğrenme topluluğu: https://t.me/GyaanSetuAi