Амнияти сатҳи сатр
AiHummer чандманзила аст, ва қавитарин ҳудуди ҷудосозии он дар худи пойгоҳи додаҳо қарор дорад: **Амният дар сатҳи сатрҳо дар PostgreSQL (RLS)**Бо фаъол будани RLS, базаи додаҳо — на танҳо коди барнома — кафолат медиҳад, ки як пурсиш танҳо сатҳҳои марбут ба иҷорагири феълӣ дида шавад.
Сатҳ: Амният дар сатҳи сатр тавассути пулакӣ маҳдуд карда шудааст. Ширкат сатҳ — он қисми платформаи ройгон/Ҷамоат нест.
Чаро RLS
Филтркунии сатҳи барномаWHERE tenant_id = ...) зарур аст, аммо заиф: як моддаи фаромӯшшуда метавонад маълумотро байни иҷорагирон фош кунад. RLS кафолатро ба PostgreSQL мегузарад, то ҳатто агар дархости филтрнашуда бошад, танҳо сатрҳои иҷорагири феълӣ баргардонда шаванд. Он як қабати ҳимоятӣ дар зери доираи худи барнома мебошад. Барои модели васеи бисёр иҷорагирӣ — ва чӣ гуна он бо таъсироти тарафии идемпотент муттаҳид мешавад — нигаред. Чандқабата ва идемпотентӣ.
Нақши маҳдуд (ихтиёрӣ)
RLS аст ихтиёрӣ фаъол кардан ва тавассути додани пайвасти дуюми базаи додаҳо ба даргоҳ фаъол мегардад, ки нақши маҳдуд ба ҷои соҳиби база истифода мекунад:
# /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 нақш аст не соҳиби ҷадвал, аз ин рӯ PostgreSQL сиёсати RLS-ро нисбат ба он татбиқ мекунад. Саволҳои барнома тавассути ин маҳдудият мегузарад. Фаъол сохтани RLS масъалаи танзим кардан аст AIHUMMER_DB_APP_URL — ва насбкуниҳои маҳаллӣ/стандартӣ (мизбонмест) он тағйирёбиро ба таври худкор насб мекунад, бинобар ин RLS фавран фаъол аст. Он танҳо дар маънои «қабул кардан»-ро интихоб кардан аст, ки насби махсус ё дастӣ бояд танзим карда шавад AIHUMMER_DB_APP_URL худро.
[!NOTE] Бе
AIHUMMER_DB_APP_URL, дарвоза барои ҳамаро аз захираи соҳиб истифода мекунад ва RLS на танҳо самаранок татбиқ намешавад. Ҳавзи маҳдудшударо муқаррар кунед (ки он стандарти насбонанда барои шумо анҷом медиҳад) то изолятсияи сатҳи пойгоҳдодаро фаъол кунад.
[!IMPORTANT] RLS ба таъриф вобаста нест. Он дар ҳамаи таърифҳо, аз ҷумла Community, яксон кор мекунад. Агар дар экрани иҷозатнома «Ҳифзи сатҳи сатр» ҳамчун дастнорас нишон дода шавад, ин нодурустии худи он экран аст, на ҳолати пойгоҳи додаҳои шумо.
RLS дар куҷо фавран фаъол аст ва дар куҷо онро худатон бояд фаъол кунед
| Чӣ тавр насб кардед | Ҳолати RLS пас аз насб |
|---|---|
| Насби муқаррарӣ, PostgreSQL-ро насбкунанда меорад | Фаъол. Нақши маҳдуд ва AIHUMMER_DB_APP_URL худкор сохта мешаванд |
| PostgreSQL-и худӣ ё идорашаванда (суроғаи пойгоҳ пешакӣ дода шудааст) | Фаъол не. Нақш ва AIHUMMER_DB_APP_URL-ро оператор месозад |
| Насб бидуни ҳуқуқи маъмур (rootless) | Фаъол не. Ҳамин тавр |
[!WARNING] Ду хато, ки пас аз онҳо RLS «фаъол» аст, вале чизеро ҳифз намекунад. Якум: дар
AIHUMMER_DB_APP_URLнақши соҳиби ҷадвалҳо ё суперкорбар нишон дода шудааст — PostgreSQL чунин нақшҳоро аз сиёсатҳо озод мекунад, вале дарвоза ба ҳар ҳол хабар медиҳад, ки RLS фаъол аст. Нақши маҳдуди алоҳидаро истифода баред. Дуюм: дар PostgreSQL-и худӣ нақши маҳдуд метавонад худкор бо пароли пешбинишаванда сохта шавад — то он даме ки пойгоҳ аз шабака дастрас шавад, ба он пароли худро диҳед.
Муайянкунии доираи барои ҳар иҷоранишин
Дар дохили як дархост, барнома пеш аз иҷрои пурсишҳои ҳудудбандии иҷоранишин, иҷоранишини ҷории пайвастшавиро муайян мекунад — аз ҷиҳати назариявӣ db.WithTenantВақте ки муайян карда мешавад, сиёсати RLS оид ба нақши маҳдуд ҳар як хондан ва навиштани маълумотро ба сатрҳои он иҷоранишин маҳдуд мекунад. Майдон ба воҳиди кор пайваст шудааст, бинобар ин байни дархостҳои ҳамзамон паҳн намешавад.
request ─▶ resolve tenant ─▶ db.WithTenant(tenant) ─▶ queries see only that tenant
Систем / режими гузариш барои коргарон
Баъзе корҳо ба таври қонунӣ байни иҷорагирон ё бефарқи иҷорагиранд — коргарони пасзамина, барномаҳои ҷадвалбандӣ, барқарорсозии таҳвил ва нигоҳдории шабеҳ. Барои инҳо, гузаргоҳ истифода мебарад режими система (гузариш) ки дар ҳавзи соҳиби он кор мекунад, берун аз сиёсатҳои RLS-и ҳар як иҷоранишин, то вазифаҳои инфрасохторӣ метавонанд дар тамоми маҷмӯаи додаҳо амал кунанд.
[!WARNING] Ҳолати гузариш танҳо барои коргарони боэътимоди дохилӣ аст. Роҳҳои коди идоракунии дархост амале, ки ба манфиати корбар анҷом дода мешавад, ҳамеша бояд тавассути маҳдудиятҳо гузарад ҳавзи маҳдудшудаи иҷоранишин — ҳеҷ гоҳ роҳи гузариш нест.
Интиқолҳо дар ҳавзори соҳибкор иҷро мешаванд
Тағйироти сохторӣ ҳуқуқҳоро талаб мекунанд, ки нақши маҳдуд надорад, бинобар ин Муҳоҷираҳо ҳамеша дар халифи соҳибй амалӣ мешаванд (AIHUMMER_DATABASE_URL), таҳти маҳдудияти машваратӣ, ҳангоми оғоз. Маҳдудшуда aihummer_app Нақш танҳо барои равуои оддии барнома истифода мешавад. Ин ҷудошавии имтиёзҳоро тоза нигоҳ медорад: амалиётҳои тағйир додани схема соҳибро истифода мебаранд; дастрасии маълумоти иҷоранишин бо нақши маҳдуд ва бо татбиқи RLS амалӣ мешавад.
Баъд ба куҷо
- Чандқабата ва идемпотентӣ — намуди пурраи иҷоранишин ва чӣ гуна таъсирҳои канорӣ дар зери барқарорсозӣ бехатар мемонанд.
- Анбори сиррҳо — DEKҳои ҳар иҷоранишин ҳамонро тақвият медиҳанд ҷудошавӣ дар қабати сиррҳо
- RBAC ва калидҳои API бо чуқурӣ — иҷозат аз боло қабати додаҳо.