AiHummer
Кыргызча
Кирүү
v1.0.x
{ }Swagger

Сап деңгээлиндеги коопсуздук

v1.0.x · жаңыланды 2026-06-26

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 колдонулган чектелген ролду колдонот.

Кийинки кайда