Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Yazı Tipi BoyutlandırıcıAa
  • Anasayfa
  • Teknoloji
    • Siber Güvenlik
    • Yapay Zeka
    • Donanım
    • Bilim
  • Yazılım
  • Savunma & İstihbarat
  • Oyun
  • Yaşam
    • Finans
    • Sinema
    • Dünyadan Haberler
  • İş Birliği
Okuma: Kiracı Verilerini Sızdırmayı Durdurun: Laravel’de PostgreSQL Satır Seviyesi Güvenliği
Paylaş
Yazı Tipi BoyutlandırıcıAa
Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Ara
Bizi Takip Et
  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti
© 2026 Teknomers. All Rights Reserved.

Anasayfa » Kiracı Verilerini Sızdırmayı Durdurun: Laravel’de PostgreSQL Satır Seviyesi Güvenliği

Yazılım

Kiracı Verilerini Sızdırmayı Durdurun: Laravel’de PostgreSQL Satır Seviyesi Güvenliği

teknomers
Son güncelleme: 24 Nisan 2026 12:18
teknomers
Paylaş
Paylaş

Uygulama Seviyesinde İzolasyon Hatası

Smart Tech Devs’te bir B2B SaaS platformu tasarlarken, veri izolasyonu en önemli önceliğinizdir. Laravel’deki standart yaklaşım, her veritabanı sorgusuna otomatik olarak where('tenant_id', $id) şartını eklemek için global scope kullanmaktır. Eloquent global scope’ları kullanışlı olsa da, uygulama katmanında uygulanırlar. Eğer bir geliştirici kazara withoutGlobalScopes() kullanırsa ya da Eloquent’ı atlayarak ham SQL sorgusu çalıştırılırsa, Tenant A, aniden Tenant B’nin fatura bilgilerini görebilir. Kurumsal yazılımlarda bu, felaket niteliğinde bir veri ihlalidir.

Gerçekten dayanıklı, rahat uyku sağlayan bir mimari inşa etmek için, çok kiracılı izolasyonu en alt katmana indirmeliyiz: veritabanına. Bunu PostgreSQL Row-Level Security (RLS) kullanarak başarırız.

Row-Level Security Nedir?

PostgreSQL RLS, veritabanı seviyesinde görünen bir güvenlik görevlisi gibi davranır. Bir tablo üzerinde etkinleştirildiğinde, hangi satırların görünür veya değiştirilebilir olduğunu belirten katı SQL politikaları tanımlarsınız. Eğer veritabanı motoru, tenant ID’ye dayanarak sorguyu reddederse, uygulama seviyesindeki hatalar veya atlanmış scope’lar veri sızıntısına neden olamaz.

Adım 1: Laravel Migration ile RLS’yi Etkinleştirmek

RLS’yi etkinleştirmek ve katı izolasyon politikamızı tanımlamak için migrations içinde ham SQL ifadelerini kullanırız. invoices tablosunu güvence altına alalım.


use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\DB;

class CreateInvoicesTable extends Migration
{
    public function up(): void
    {
        Schema::create('invoices', function (Blueprint $table) {
            $table->id();
            $table->foreignId('tenant_id')->constrained();
            $table->decimal('amount', 10, 2);
            $table->timestamps();
        });

        // 1. Tablo üzerinde Row-Level Security'yi etkinleştir
        DB::statement('ALTER TABLE invoices ENABLE ROW LEVEL SECURITY;');

        // 2. Politikanın tablo sahipleri için de zorlanmasını sağla (güvenlik için kritik)
        DB::statement('ALTER TABLE invoices FORCE ROW LEVEL SECURITY;');

        // 3. Politika Oluştur: Bir satır yalnızca tenant_id'si
        // oturumda ayarlanmış 'app.current_tenant_id' değişkeniyle eşleştiğinde görünür.
        DB::statement("
            CREATE POLICY tenant_isolation_policy ON invoices
            USING (tenant_id = current_setting('app.current_tenant_id', true)::bigint);
        ");
    }

    public function down(): void
    {
        DB::statement('DROP POLICY IF EXISTS tenant_isolation_policy ON invoices;');
        Schema::dropIfExists('invoices');
    }
}

Adım 2: Veritabanı Bağlamını Middleware ile Ayarlamak

Veritabanı politikasının sorguyu değerlendirmek için app.current_tenant_id‘ye ihtiyaç duyması nedeniyle, bu değişkeni her HTTP isteğinin başlangıcında PostgreSQL oturumuna enjekte etmemiz gerekir. Bunu Laravel Middleware ile temiz bir şekilde yapıyoruz.


namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class SetPostgresTenantContext
{
    public function handle(Request $request, Closure $next)
    {
        // Tenant'ı alan veya kimlik doğrulama kullanıcısı aracılığıyla çözümle
        $tenantId = $request->user()?->tenant_id;

        if ($tenantId) {
            // Tenant ID'sini doğrudan PostgreSQL oturumuna enjekte et
            DB::statement("SET app.current_tenant_id = '{$tenantId}'");
        } else {
            // Kamuya açık rotalar için, bunu tamamen geçersiz kıl
            DB::statement("SET app.current_tenant_id = ''");
        }

        return $next($request);
    }
}

Mühendislik ROI’si

Tenant kapsamınızı PHP’den PostgreSQL’e geçirdiğinizde, veri sızıntısı açısından mimari olarak dayanıklılık sağlarsınız. Hatta eğer bir junior geliştirici DB::select('SELECT * FROM invoices') yazsa bile, PostgreSQL isteği yakalar, oturumun app.current_tenant_id‘sini kontrol eder ve yalnızca bu belirli tenant’ın kayıtlarını döner. Bu, yüksek riskli B2B SaaS ortamları için en büyük koruma mekanizmasıdır.

Kaynak: Orijinal Makale

Contents
  • Uygulama Seviyesinde İzolasyon Hatası
  • Row-Level Security Nedir?
    • Adım 1: Laravel Migration ile RLS’yi Etkinleştirmek
    • Adım 2: Veritabanı Bağlamını Middleware ile Ayarlamak
  • Mühendislik ROI’si
Sunucunuzda Disk Alanı Tükendiğinde: Önleme, Tespit ve Kurtarma
İK Yönetimini Dönüştüren HRMS: Evrak Kargaşasından Akıllı Otomasyona Geçiş
2026 Yılında En İyi 11 Laravel Geliştirme Aracı (Gerçek Verimlilik Sıralaması)
Reddedilen Laravel PR’den Laravel Arr Genişletmesine: Arr::after Ekleme
Flexiwind’i Tanıtıyoruz (Beta): Laravel & Livewire için modüler UI sistemi
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale Diablo 4’teki İsyan Zamanları ve Ön Yükleme Ayrıntıları Açıklandı
Sonraki Makale WIRED Ekibinin Para Tasarrufu İçin Etkili İpuçları

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

Yapay Zeka Verimliliği İçin Hızla Önlem Alınmalı
Donanım
Bu Kalın Tablet Çocuğumu Oyuncaklarını Toplamaya Teşvik Etti
Liste
Dota 2 Güncellemesi: Doğa Prophet ve Arc Warden Güçleniyor, Gizemli Axe Değişimi Merak Uyandırıyor
Oyun
Acil: SOC’ların Sadece %10’u AI’dan Mükemmel Değer Aldığını Söylüyor
Siber Güvenlik
Laravel admin araçlarında sürükle-bırak sıralama, göründüğünden daha hızlı karmaşık hale geliyor.
Yazılım
Renkli Yedek Parçalarla MacBook Neo’yu Kişiselleştirdim
Liste
//

Siber güvenlik, yapay zeka ve savunma sanayiinden; finans ve sinema dünyasına uzanan geniş bir yelpaze. Teknomers; teknoloji, strateji ve yazılım dünyasını sade bir dille sizlerle buluşturuyor.

Kurumsal

  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti

Kategoriler

  • Teknoloji
  • Oyun
  • Sinema
  • Siber Güvenlik
  • Bilim
  • Finans
  • Dünyadan Güncel Haberler

Populer

  • TV'de Ücretsiz İzlenebilen Şifresiz Erotik Kanallar (2025 Güncel Frekans Listesi)

  • The Last of Us PC Kontrolleri: Hızlı Silah Değiştirme ve Tüm Tuşlar (2025)

  • Hogwarts Legacy'de Odaklanma İksiri Nasıl Yapılır?

Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Bizi Takip Et
© 2026 Teknomers. All Rights Reserved.
Welcome Back!

Sign in to your account

Kullanıcı Adı veya E-posta Adresi
Şifre

Şifrenizi mi unuttunuz?