Konuyu Açan #1
PostgreSQL üzerinde view’lar, veriye erişimi belirli bir katmanda sınırlandırmanın güvenli ve verimli yollarından biridir. Ancak güvenlik davranışını doğru anlamak, hangi seçeneğin hangi senaryoda doğru olduğunu bilmekle güçlenir. Aşağıda en önemli güvenlik yönlerini ve pratik biçimde nasıl kullanıldığını paylaşayım:

1) SECURITY DEFINER ve SECURITY INVOKER farkı
  • SECURITY INVOKER: View’i sorgulayan kullanıcının yetkileriyle çalışır. Yani kullanıcı kendi yetkisinin üzerinde erişime sahip değilse bile kendi yetkisiyle sınırlı kalır.
  • SECURITY DEFINER: View’i oluşturan rolün yetkileriyle çalışır. Bu, sınırlı kullanıcıların, kendi yetkileriyle yapamayacaklarını bir arkadan yapmalarını sağlar. Ancak güvenlik hususunda dikkatli olunmalı; DEFINER tarafında yetkili olan rolün güvenliği zayıfsa risk doğabilir.

Kullanım örneği: Bütçe raporu gibi hassas bir görünüm için güvenliğinizi artırmak amacıyla DEFINER kullanılabilir; fakat DEFINER rolünün temel güvenlik önlemleri alması gerekir.


2) Yetki (GRANT) yönetimi
  • VIEW’e ulaşımı kontrollü tutmak için sadece gerekli rollere SELECT izni verin.
  • Subquery veya görünüm içinde farklı tablolardan veri çekiyorsanız, hangi tablolara ihtiyaç duyulduğunu netleştirin ve gereksiz veri sızıntısını önleyin.
  • Kurallı güvenlik politikaları (row-level security) PostgreSQL 9.5+ ile mümkün değildir; çünkü RLS, tablolar için çalışır. Görünümler üzerinde kullanılan tablolar için de uygun RLS politikaları düşünülmelidir.


3) Sütun seviyesinde görünüm sınırları
  • VIEW ile hangi sütunlar gösterilecek? Gereksiz sütunları saklayın ve alias kullanarak hassas değerleri hesaplanmış/anonimleştirilmiş şekilde sunun.
  • Dosya boyutu veya hesaplama maliyeti açısından sütunların içeriğinin hafife alınması performansla ilgili sorunlar doğurabilir; gereken minimum sütunları kapsayacak şekilde tasarlayın.


4) Performans ve güvenlik dengesi
  • Büyük görünümlerde alt sorgularda gereksiz tablo katmanları güvenlik risklerini artırabilir ve performans maliyetlerini yükseltebilir. Sık çağrılan görünümler için MATERIALIZED VIEW değerlendirin; ancak güncel veriyi nasıl yöneteceğinizi planlayın.
  • Access politikalarınız değişirse görünümlerin güvenlik etkisini yeniden gözden geçirin.


Bu konularda kendi ortamınızda karşılaştığınız güvenlik senaryoları veya sorunlar var mı? Hangi durumda SECURITY DEFINER kullanmayı düşündünüz, ya da hangi durumlarda INVOKER daha güvenli göründü? Deneyimlerinizi paylaşın, karşılaştığınız gotcha’ları ve çözüm yaklaşımlarını konuşalım.

Yanıt vermek için giriş yapmış olmalısınız.

Bu konuyu görüntüleyen kullanıcılar (Toplam: 4, Üyeler: 4, Misafirler: 0)
Toplam: 4 (üyeler: 4, misafirler: 0)
0 alıntı seçildi