Row Level Security
Veri koruması için Row Level Security'yi (RLS) anlama ve uygulama.
Not: Bu içerik, tanıtım amacıyla hazırlanmış örnek/yer tutucu bir içeriktir.
Row Level Security (RLS), kullanıcıların veritabanı tablolarında hangi satırlara erişebileceğini denetleyen, PostgreSQL'e yerleşik bir yetkilendirme sistemidir.
Neden RLS?
RLS çeşitli avantajlar sunar:
- Veritabanı düzeyinde güvenlik - Uygulama kodunda hata olsa bile koruma sağlar
- Otomatik uygulama - Manuel yetkilendirme kontrollerine gerek kalmaz
- Çok kiracılı izolasyon - Kullanıcıların yalnızca kendi verilerini görmesini sağlar
- Performans - Veritabanı düzeyinde optimize edilmiştir
RLS'yi Etkinleştirme
Tüm tablolarda RLS etkin olmalıdır:
ALTER TABLE your_table ENABLE ROW LEVEL SECURITY;
Yaygın Politika Kalıpları
Kişisel Hesap Erişimi
CREATE POLICY "Users can access their personal account data" ON your_table FOR ALL USING (account_id = auth.uid());
Ekip Hesabı Erişimi
CREATE POLICY "Users can access their team account data"
ON your_table FOR ALL
USING (
account_id IN (
SELECT account_id FROM accounts_memberships
WHERE user_id = auth.uid()
)
);
Okuma ve Yazma İzinleri
-- Tüm üyeler okuyabilir
CREATE POLICY "Team members can view data"
ON your_table FOR SELECT
USING (account_id IN (SELECT get_user_accounts(auth.uid())));
-- Yalnızca sahipler değiştirebilir
CREATE POLICY "Only owners can modify data"
ON your_table FOR UPDATE
USING (
account_id IN (
SELECT account_id FROM accounts_memberships
WHERE user_id = auth.uid() AND role = 'owner'
)
);
RLS Politikalarını Test Etme
RLS politikalarınızın doğru çalıştığından emin olmak için onları her zaman test edin:
-- Belirli bir kullanıcı olarak test et SET request.jwt.claims.sub = 'user-uuid-here'; -- Veri seçmeyi dene SELECT * FROM your_table; -- Sıfırla RESET request.jwt.claims.sub;
Yönetici Atlatması
Service role anahtarları RLS'yi atlar. Bunları son derece dikkatli kullanın ve admin istemcisini kullanırken her zaman manuel yetkilendirme kontrolleri uygulayın.