Rea-taseme turvalisus
AiHummer on mitme kasutajaga ja selle kõige tugevam isolatsiooni piir asub andmebaasis endas: PostgreSQL rea-taseme turvalisus (RLS). RLS-i lubamisel tagab andmebaas — mitte ainult rakenduse kood —, et päring näeb ainult jooksva üürniku ridu.
Tase: Rea taseme turvalisus on piiratud tasulise kasutamisega Ettevõte tier — see ei ole tasuta/Community platvormi osa.
Miks RLS
Rakendustaseme filtreerimine (WHERE tenant_id = ...) on vajalik, kuid habras: üks unustatud klausli võib lekkida andmeid erinevate üürnike vahel. RLS viib garantii PostgreSQL-i, nii et isegi filtreerimata päring tagastab ainult selle hetkese üürniku read. See on sügavale seadistatud kaitsekihi rakenduse enda ulatuse alla. Laiema mitmeüürnikumudeli kohta — ja kuidas see sobitub idempotentsete kõrvalmõjudega — vt Mitmeinimelisus ja idempotentsus.
Piiratud roll (valikuline liitumine)
RLS on osalemiseks ja aktiveeritakse, andes väravale teise andmebaasi ühenduse, mis kasutab piiratud rolli omaniku asemel:
# /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
See aihummer_app roll on ei tabeli omanik, nii et PostgreSQL rakendab sellele RLS-i poliitikaid. Rakenduse päringud liiguvad läbi selle piiratud reservuari. RLS-i lubamine on küsimus seadistuse tegemisest AIHUMMER_DB_APP_URL — ja kohalik/tavaline (hosti-loomupärane) installatsioon seab selle muutuja automaatselt, nii et RLS on kohe valmis kasutamiseks. See on “valikuline” ainult selles mõttes, et kohandatud või käsitsi juurutamine peab seadistama AIHUMMER_DB_APP_URL ise.
[!NOTE] Ilma
AIHUMMER_DB_APP_URL, värav kasutab kõiges omanike basseinid ja RLS-i ei rakendata tegelikult. Määra piiratud hulk (mis standardne installija teeb teie jaoks) andmebaasi tasandi isolatsiooni sisse lülitamiseks.
[!IMPORTANT] RLS ei sõltu paketist. See töötab kõigis pakettides ühtmoodi, sealhulgas Community’s. Kui litsentsivaates on „Reataseme turve” näidatud kättesaamatuna, on see selle vaate ebatäpsus, mitte sinu andmebaasi olek.
Kus RLS on juba aktiivne ja kus tuleb see ise sisse lülitada
| Kuidas paigaldasid | RLS pärast paigaldust |
|---|---|
| Tavapaigaldus, PostgreSQL-i seab üles paigaldaja | Aktiivne. Piiratud roll ja AIHUMMER_DB_APP_URL luuakse sinu eest |
| Oma või hallatud PostgreSQL (andmebaasi aadress oli ette antud) | Ei ole aktiivne. Rolli ja AIHUMMER_DB_APP_URL loob haldaja |
| Paigaldus ilma administraatoriõigusteta (rootless) | Ei ole aktiivne. Sama |
[!WARNING] Kaks viga, mille järel RLS on „sees”, kuid ei kaitse midagi. Esimene:
AIHUMMER_DB_APP_URLosutab tabelite omanikule või superkasutajale — PostgreSQL vabastab sellised rollid poliitikatest ja lüüs teatab RLS-i sellest hoolimata aktiivsena. Kasuta eraldi piiratud rolli. Teine: omaenda PostgreSQL-is võib piiratud roll tekkida automaatselt etteaimatava parooliga — anna sellele oma parool enne, kui andmebaas muutub võrgust kättesaadavaks.
Iga üürniku ulatuse määramine
Päringu sees seab rakendus ühendusel kehtiva üürniku enne, kui käivitab üürnikule suunatud päringud — kontseptuaalselt db.WithTenant. Kui piir on määratud, piiravad RLS-i poliitikad piiratud rollil iga lugemise ja kirjutamise selle üürniku ridadele. Piir on seotud tööühikuga, nii et see ei leki samaaegsete päringute vahel.
request ─▶ resolve tenant ─▶ db.WithTenant(tenant) ─▶ queries see only that tenant
Süsteem / töötlüstee töötajatele
Mõned tööd on õigustatult üürnikuülesed või üürnikust sõltumatud — taustatöötajad, ajastajad, kohaletoimetamise taastamine ja sarnane hooldus. Neile kasutab lüüsi süsteemi (ümberlülitus) režiim mis töötab omaniku andmebaaside grupil, per-kasutaja RLS-poliitikast väljaspool, nii et infrastruktuuriülesanded saavad töötada kogu andmekogumiga.
[!WARNING] Ümberlükkamise režiim on mõeldud ainult usaldusväärsetele sisetöötajatele. Päringute töötlemise kooditeed mis tegutsevad kasutaja nimel, peavad alati läbima piiratud üürniku ulatuses olev kraan — mitte kunagi kõrvaltee.
Migratsioonid toimuvad omaniku paagil
Skeemi muutmiseks on vajalikud õigused, mida piiratud rollil ei ole, seega migratsioonid käivad alati omaniku paagis (AIHUMMER_DATABASE_URL), käivitamisel nõuandva lukustuse all. Piiratud aihummer_app rolli kasutatakse ainult tavapärase rakenduse liikluse jaoks. See hoiab privileegide eraldamise puhtana: skeemi muutvad toimingud kasutavad omanikku; üürniku andmetele juurdepääs kasutab piiratud rolli koos RLS-iga.
Kuhu järgmine
- Mitmeinimelisus ja idempotentsus — täielik üürniku mudel ja kuidas kõrvalmõjud jäävad taastumise ajal ohutuks.
- Salade ladu — üürniku kohta DEKid tugevdavad sama eraldatus salakihi tasemel.
- RBAC ja piiritletud API-võtmed — volitus üle andmekiht.