AiHummer
Svenska
Logga inKonto
v1.0.x
{ }Swagger

Radnivåsäkerhet

v1.0.x · uppdaterad 2026-06-26

AiHummer är multitenant, och dess starkaste isoleringsgräns finns i själva databasen: PostgreSQL radnivåsäkerhet (RLS). Med RLS aktiverat ser till att databasen — inte bara applikationskoden — att en fråga endast någonsin ser de rader som tillhör den aktuella hyresgästen.

Nivå: Radnivåsäkerhet är begränsad av den betalade Företag nivå — det är inte en del av den gratis/Community-plattformen.

Varför RLS

Filtrering på applikationsnivå (WHERE tenant_id = ...) är nödvändig men skör: en enda bortglömd klausul kan läcka data mellan hyresgäster. RLS flyttar garantin in i PostgreSQL, så att även en ofiltrerad fråga endast returnerar den aktuella hyresgästens rader. Det är ett försvar-i-djupets-lager under applikationens egna avgränsningar. För den bredare multitenansmodellen — och hur den kombineras med idempotenta bieffekter — se Fleranvändarsystem och idempotens.

Den begränsade rollen (valfri)

RLS är anmäla sig och aktiveras genom att ge gatewayen en andra databaskoppling som använder en begränsad roll istället för ägaren:

# /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

Den aihummer_app roll är inte bordägaren, så PostgreSQL tillämpar RLS-policyer på det. Applikationsförfrågningar går igenom denna begränsade pool. Att aktivera RLS är en fråga om att ställa in AIHUMMER_DB_APP_URL — och lokala/standard (värd-nativa) installationer ställer in den variabeln automatiskt, så RLS är aktivt direkt. Det är “valfritt” endast i den meningen att en anpassad eller manuell distribution måste ställa in AIHUMMER_DB_APP_URL självt.

[!NOTE] Utan AIHUMMER_DB_APP_URL, gatewayn använder ägarpoolen för allt och RLS genomförs i praktiken inte. Ställ in den begränsade poolen (vilken standardinstallatören gör åt dig) för att slå på databassnivåisoleringen.

[!IMPORTANT] RLS beror inte på prisplanen. Det fungerar likadant på alla planer, Community inräknad. Om licenssidan visar ”Säkerhet på radnivå” som otillgänglig är det en felaktighet i den vyn, inte databasens tillstånd.

Var RLS redan är aktivt och var du måste slå på det

Så installerade du RLS efter installationen
Standardinstallation, installeraren sätter upp PostgreSQL Aktivt. Den begränsade rollen och AIHUMMER_DB_APP_URL skapas åt dig
Egen eller hanterad PostgreSQL (databasadressen angavs i förväg) Inte aktivt. Rollen och AIHUMMER_DB_APP_URL skapar du själv
Installation utan administratörsrättigheter (rootless) Inte aktivt. Samma sak

[!WARNING] Två misstag som lämnar RLS ”på” utan att skydda något. Det första: AIHUMMER_DB_APP_URL pekar på tabellägaren eller en superanvändare — PostgreSQL undantar sådana roller från policyerna, och gatewayen rapporterar ändå RLS som aktivt. Använd en separat begränsad roll. Det andra: på din egen PostgreSQL kan den begränsade rollen skapas automatiskt med ett förutsägbart lösenord — ge den ett eget lösenord innan databasen blir nåbar över nätet.

Per-hyresgästanpassad avgränsning

Inom en förfrågan etablerar applikationen den aktuella hyresgästen på anslutningen innan den kör hyresgästsspecifika frågor — konceptuellt db.WithTenant. När den har avgränsats begränsar RLS-policyer på den begränsade rollen varje läs- och skrivoperation till den hyresgästens rader. Avgränsningen är kopplad till arbetsenheten, så den läcker inte mellan samtidiga förfrågningar.

request ─▶ resolve tenant ─▶ db.WithTenant(tenant) ─▶ queries see only that tenant

System / kringgå läge för arbetare

Viss verksamhet är legitimt tvärgående mellan hyresgäster eller hyresgäst-oberoende — bakgrundsarbetare, schemaläggare, leveransåterställning och liknande underhåll. För dessa använder gatewayn en system (omgå) läge som körs på ägarpoolen, utanför RLS-policyerna för varje hyresgäst, så att infrastruktursuppgifter kan fungera över datasetet.

[!WARNING] Bypass-läge är endast för betrodda interna arbetare. Begäran-hanteringskodvägar som agerar å en användares vägnar måste alltid köras genom det begränsade, hyresgäståtkomstpool — aldrig kringgående väg.

Migrationer körs på ägarpoolen

Schematändringar kräver privilegier som den begränsade rollen inte har, så migreringar körs alltid på ägarpoolen (AIHUMMER_DATABASE_URL), under ett rådgivande lås, vid start. Den begränsade aihummer_app rollen används endast för vanlig applikationstrafik. Detta håller privilegieskillnaden ren: schemaändrande operationer använder ägaren; åtkomst till hyresgästsdata använder den begränsade rollen med RLS tillämpad.

Vart härnäst