Satır Düzeyi Güvenlik
AiHummer çok kiracılıdır ve en güçlü izolasyon sınırı veritabanının kendisinde bulunur: **PostgreSQL Satır Düzeyinde Güvenlik (RLS)**RLS etkinleştirildiğinde, sadece uygulama kodu değil, veritabanı da bir sorgunun yalnızca mevcut kiracıya ait satırları görmesini sağlar.
Seviye: Satır Düzeyinde Güvenlik, ücretli sürümle sınırlıdır Girişim katman — ücretsiz/Topluluk platformunun bir parçası değildir.
Neden RLS
Uygulama düzeyi filtreleme (WHERE tenant_id = ...) gerekli ama hassastır: tek bir unutulmuş madde, verilerin kiracılar arasında sızmasına yol açabilir. RLS garantiyi PostgreSQL’e taşır, böylece filtrelenmemiş bir sorgu bile yalnızca mevcut kiracının satırlarını döndürür. Uygulamanın kendi kapsamının altında derinlemesine bir savunma katmanıdır. Daha geniş çok kiracılılık modeli ve bunun idempotent yan etkilerle nasıl eşleştiği için bkz Çok kiracılılık ve değiştirilemezlik.
Sınırlı rol (isteğe bağlı)
RLS şudur katılmak ve sahibinden ziyade kısıtlı bir rol kullanan ikinci bir veritabanı bağlantısı vererek ağ geçidi etkinleştirilir:
# /home/.aihummer/etc/gateway.env
# Owner pool — runs migrations, used for system/bypass operations
AIHUMMER_DATABASE_URL=postgres://owner:...@localhost/aihummer
# Restricted application pool — RLS policies apply (aihummer_app role)
AIHUMMER_DB_APP_URL=postgres://aihummer_app:...@localhost/aihummer
aihummer_app rolü değil tablo sahibi, böylece PostgreSQL RLS politikalarını buna uygular. Uygulama sorguları bu kısıtlı havuzdan geçer. RLS’yi etkinleştirmek, bunu ayarlamak meselesidir AIHUMMER_DB_APP_URL — ve yerel/standart (host-native) kurulumlar bu değişkeni otomatik olarak ayarlar, bu nedenle RLS kutudan çıktığı gibi aktiftir. Sadece özel veya manuel bir dağıtımın ayarlaması gerektiği anlamında “katılım isteğe bağlı”dır AIHUMMER_DB_APP_URL kendi başına.
[!NOTE] Olmadan
AIHUMMER_DB_APP_URL, ağ geçidi her şey için sahip havuzunu kullanır ve RLS fiilen uygulanmıyor. Kısıtlı havuzu ayarlayın (ki bu veritabanı düzeyinde izolasyonu açmak için sizin yerinize standart yükleyicinin yaptığı)
[!IMPORTANT] RLS pakete bağlı değildir. Community dâhil bütün paketlerde aynı çalışır. Lisans ekranında «Satır düzeyi güvenlik» kullanılamaz görünüyorsa bu o ekranın bir yanlışlığıdır, veritabanınızın durumu değildir.
RLS nerede hemen etkin, nerede sizin açmanız gerekir
| Nasıl kurdunuz | Kurulumdan sonra RLS |
|---|---|
| Standart kurulum, PostgreSQL’i kurulum programı kurar | Etkin. Kısıtlı rol ve AIHUMMER_DB_APP_URL sizin için oluşturulur |
| Kendi veya yönetilen PostgreSQL (veritabanı adresi önceden verilmiş) | Etkin değil. Rolü ve AIHUMMER_DB_APP_URL değerini operatör oluşturur |
| Yönetici hakları olmadan kurulum (rootless) | Etkin değil. Aynı şekilde |
[!WARNING] RLS’i «açık» gösterip hiçbir şeyi korumayan iki hata. Birincisi:
AIHUMMER_DB_APP_URLtablo sahibini veya bir süper kullanıcıyı gösterir — PostgreSQL bu rolleri politikalardan muaf tutar, ağ geçidi ise RLS’i yine de etkin diye bildirir. Ayrı bir kısıtlı rol kullanın. İkincisi: kendi PostgreSQL’inizde kısıtlı rol otomatik olarak tahmin edilebilir bir parolayla oluşabilir — veritabanı ağdan erişilebilir olmadan önce ona kendi parolanızı verin.
Kiracı başına kapsamlandırma
Bir isteğin içinde, uygulama, kiracıya özel sorguları çalıştırmadan önce bağlantı üzerinde geçerli kiracıyı belirler — kavramsal olarak db.WithTenant. Bir kez kapsam belirlendiğinde, kısıtlı roldeki RLS politikaları, her okuma ve yazmayı o kiracının satırlarıyla sınırlar. Kapsam, iş birimiyle ilişkilidir, bu nedenle eşzamanlı talepler arasında sızmaz.
request ─▶ resolve tenant ─▶ db.WithTenant(tenant) ─▶ queries see only that tenant
Çalışanlar için sistem / atlama modu
Bazı işler meşru olarak kiracılar arası veya kiracıdan bağımsızdır — arka plan çalışanları, zamanlayıcılar, teslimat kurtarma ve benzeri bakım işlemleri. Bunlar için, geçit şunu kullanır sistem (atlatma) modu Sahip havuzunda çalışan, her kiracıya ait RLS politiklerinin dışında olan, böylece altyapı görevlerinin veri kümesi genelinde çalışabilmesini sağlayan.
[!WARNING] Bypass modu yalnızca güvenilen iç çalışanlar içindir. İstek işleme kod yolları Bir kullanıcı adına hareket eden eylemler her zaman sınırlı olanlar üzerinden çalışmalıdır, kiracı kapsamlı havuz — asla atlama yolu.
Göçler sahip havuzunda çalışır
Şema değişiklikleri, kısıtlı rolün sahip olmadığı ayrıcalıklar gerektirir, bu yüzden göçler her zaman sahip havuzunda çalışır (AIHUMMER_DATABASE_URL), başlangıçta, bir danışma kilidi altında. Kısıtlı aihummer_app rol yalnızca sıradan uygulama trafiği için kullanılır. Bu, ayrıcalık ayrımını temiz tutar: şema değiştiren işlemler sahibi kullanır; kiracı verilerine erişim, RLS uygulanmış kısıtlı rolü kullanır.
Sonra nereye?
- Çok kiracılılık ve değiştirilemezlik — tam kira modeli ve yan etkilerin iyileşme sırasında nasıl güvende kaldığı.
- Sırlar kasası — kiracı başına DEK’ler aynı şeyi destekler gizli katmanda izolasyon.
- RBAC ve kapsamlı API anahtarları — yukarıdaki yetkilendirme veri katmanı.