Сап деңгээлиндеги коопсуздук
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
саясаттарын колдонот. Тиркеме суроо-талаптары ушул чектелген пул аркылуу агат.
Хост-ныктуу орнотуулар үчүн орноткуч AIHUMMER_DB_APP_URL дегенди автоматтык түрдө
туташтырат.
[!NOTE]
AIHUMMER_DB_APP_URLжок болсо, издегич бардыгы үчүн ээ пулун колдонот жана RLS иш жүзүндө мажбурланбайт. Маалымат базасы деңгээлиндеги обочолонууну күйгүзүү үчүн чектелген пулду жөндөңүз.
Ар бир ижарачыга чектөө
Суроо-талаптын ичинде тиркеме ижарачыга чектелген суроо-талаптарды иштетүүдөн мурда
туташуудагы азыркы ижарачыны орнотот — концептуалдык түрдө 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 ачкычтар — маалымат катмарынын үстүндөгү уруксат берүү.