AiHummer
Latviešu
PierakstītiesKonts
v1.1.x
{ }Swagger

Rindu līmeņa drošība

v1.1.x · atjaunināts 2026-06-26

AiHummer ir daudzlietotāju, un tā spēcīgākā izolācijas robeža atrodas pašā datu bāzē: PostgreSQL rindas līmeņa drošība (RLS). Ar iespējotu RLS datubāze — ne tikai lietojumprogrammas kods — nodrošina, ka vaicājums redz tikai rindas, kas pieder pašreizējam nomniekam.

Līmenis: Rindu līmeņa drošība ir pieejama tikai maksas versijā Uzņēmums līmenis — tas nav daļa no bezmaksas/Kopienas platformas.

Kāpēc RLS

Lietojumprogrammas līmeņa filtrēšana (WHERE tenant_id = ...) ir nepieciešams, bet trausls: viena aizmirsta klauzula var nopludināt datus starp nomniekiem. RLS pārvieto garantiju uz PostgreSQL, tādējādi pat nefiltrēts vaicājums atgriež tikai pašreizējā nomnieka rindas. Tas ir dziļuma aizsardzības slānis zem pašas lietotnes skopēšanas. Par plašāku multitenantu modeli — un to, kā tas sader ar idempotentām blakusefektēm — skatīt Daudzīrīšu vide un idempotence.

Ierobežotā loma (pieteikšanās nepieciešama)

RLS ir piedalīties un tiek aktivizēts, piešķirot vārtejai otro datubāzes savienojumu, kas izmanto ierobežotu lomu, nevis īpašnieku:

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

Tas aihummer_app loma ir ne tabulas īpašnieks, tāpēc PostgreSQL piemēro tai RLS politikas. Lietojumprogrammas vaicājumi plūst caur šo ierobežoto resursu kopu. RLS ieslēgšana ir jautājums par iestatīšanu AIHUMMER_DB_APP_URL — un vietējās/standarta (datora dzimtās) instalācijas automātiski iestata šo mainīgo, tātad RLS ir aktīvs jau no paša sākuma. Tas ir “opt-in” tikai tādā nozīmē, ka nepieciešama pielāgota vai manuāla izvietošana AIHUMMER_DB_APP_URL pats par sevi.

[!NOTE] Bez AIHUMMER_DB_APP_URL, vārteja izmanto īpašnieka krājumu visam un RLS faktiski netiek īstenota. Iestatiet ierobežoto krājumu (kas standarta instalētājs dara jūsu vietā), lai ieslēgtu datubāzes līmeņa izolāciju.

[!IMPORTANT] RLS nav atkarīgs no plāna. Tas darbojas vienādi visos plānos, arī Community. Ja licences ekrānā «Rindu līmeņa drošība» rādīta kā nepieejama, tā ir šī ekrāna neprecizitāte, nevis jūsu datu bāzes stāvoklis.

Kur RLS jau darbojas un kur tas jāieslēdz pašam

Kā uzstādījāt RLS pēc uzstādīšanas
Standarta uzstādīšana, PostgreSQL sagatavo uzstādītājs Aktīvs. Ierobežotā loma un AIHUMMER_DB_APP_URL tiek izveidoti automātiski
Sava vai pārvaldīta PostgreSQL (datu bāzes adrese norādīta iepriekš) Nav aktīvs. Lomu un AIHUMMER_DB_APP_URL izveido operators
Uzstādīšana bez administratora tiesībām (rootless) Nav aktīvs. Tāpat

[!WARNING] Divas kļūdas, pēc kurām RLS ir «ieslēgts», bet neko neaizsargā. Pirmā: AIHUMMER_DB_APP_URL norāda uz tabulu īpašnieku vai superlietotāju — PostgreSQL šādas lomas atbrīvo no politikām, un vārteja tomēr ziņos, ka RLS ir aktīvs. Izmantojiet atsevišķu ierobežotu lomu. Otrā: savā PostgreSQL ierobežotā loma var tikt izveidota automātiski ar paredzamu paroli — piešķiriet tai savu paroli, pirms datu bāze kļūst pieejama tīklā.

Katram nomniekam atsevišķa mērogošana

Pieprasījumā lietotne nosaka pašreizējo īrnieku savienojumā pirms īrniekam paredzētu vaicājumu izpildes — konceptuāli db.WithTenant. Kad tas ir noteikts, RLS politikas ierobežotajā lomā ierobežo katru šī nomnieka rindu lasīšanu un rakstīšanu. Diapazons ir saistīts ar darba vienību, tāpēc tas neizplūst starp vienlaicīgajiem pieprasījumiem.

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

Sistēmas / apietās režīms darbiniekiem

Daži darbi ir likumīgi starp-noma vai noma-neitrāla — fona darbinieki, plānotāji, piegādes atjaunošana un līdzīga uzturēšana. Šiem gadījumiem vārteja izmanto sistēmas (apiet) režīms kas darbojas uz īpašnieka resursu kopas, ārpus katra īrnieka RLS politikām, tāpēc infrastruktūras uzdevumi var darboties visā datu kopā.

[!WARNING] Apkārtceļa režīms ir tikai uzticamiem iekšējiem darbiniekiem. Pieprasījumu apstrādes koda ceļi kas darbojas lietotāja vārdā, vienmēr jāizpilda caur ierobežoto, īrnieka mēroga baseins — nekad neapiet ceļu.

Migrācijas tiek veiktas uz īpašnieku grupu

Shēmas izmaiņām nepieciešamas privilēģijas, kas ierobežotajai lomai nav, tāpēc migrācijas vienmēr darbojas uz īpašnieka kopas (AIHUMMER_DATABASE_URL), sākoties darbībai, ar konsultatīvu slēdzeni. Ierobežotais aihummer_app loma tiek izmantota tikai parastajam lietojumprogrammu satiksmei. Tas uztur privilēģiju atdalīšanu tīru: shēmas maiņas operācijas izmanto īpašnieku; īrnieka datu piekļuve izmanto ierobežoto lomu ar piemērotu RLS.

Kur uz nākamo