AiHummer
Türkçe
Oturum açHesap
v1.0.x
{ }Swagger

Satır Düzeyi Güvenlik

v1.0.x · güncellendi 2026-06-26

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_URL tablo 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?