AiHummer
Монгол
НэвтрэхБүртгэл
v1.2.x
{ }Swagger

Эгнээний түвшний аюулгүй байдал

v1.2.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 бодлогыг хэрэгжүүлдэг. Програмын асуултууд энэ хязгаарлагдмал урсгалаар дамждаг. 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 хэрэгжсэн хязгаарлагдмал үүргийг ашиглана.

Дараа хаашаа явах вэ