AiHummer
Azərbaycanca
Daxil ol
v1.0.x
{ }Swagger

Sətir Səviyyəli Təhlükəsizlik

v1.0.x · yeniləndi 2026-06-26

AiHummer çoxkiracılıdır və onun ən güclü izolyasiya sərhədi verilənlər bazasının özündə yaşayır: PostgreSQL Sətir Səviyyəli Təhlükəsizlik (RLS). RLS aktiv olduqda, verilənlər bazası — yalnız tətbiq kodu deyil — sorğunun yalnız cari kiracıya aid sətirləri görməsini tətbiq edir.

Niyə RLS

Tətbiq səviyyəsində filtrlənmə (WHERE tenant_id = ...) zəruri, lakin kövrəkdir: tək unudulmuş bir şərt kiracılar arasında məlumat sıza bilər. RLS təminatı PostgreSQL-ə köçürür, beləliklə hətta filtrlənməmiş sorğu yalnız cari kiracının sətirlərini qaytarır. Bu, tətbiqin öz əhatələməsinin altındakı dərinliyə-müdafiə təbəqəsidir. Daha geniş çoxkiracılıq modeli — və onun idempotent yan təsirlərlə necə cütləşdiyi — üçün Çoxkiracılıq və idempotentlik bölməsinə baxın.

Məhdudlaşdırılmış rol (könüllü)

RLS könüllüdür və gateway-ə sahib (owner) deyil, məhdudlaşdırılmış rol istifadə edən ikinci verilənlər bazası bağlantısı verməklə aktivləşdirilir:

# /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 rolu cədvəl sahibi deyil, ona görə də PostgreSQL ona RLS siyasətlərini tətbiq edir. Tətbiq sorğuları bu məhdudlaşdırılmış pool vasitəsilə axır. Host-doğma quraşdırmalar üçün quraşdırıcı AIHUMMER_DB_APP_URL-i avtomatik qoşur.

[!NOTE] AIHUMMER_DB_APP_URL olmadan gateway hər şey üçün sahib poolundan istifadə edir və RLS faktiki olaraq tətbiq olunmur. Verilənlər bazası səviyyəsində izolyasiyanı işə salmaq üçün məhdudlaşdırılmış poolu təyin edin.

Kiracı üzrə əhatələmə

Sorğunun içində tətbiq kiracı-əhatəli sorğuları işə salmazdan əvvəl bağlantıda cari kiracını müəyyən edir — konseptual olaraq db.WithTenant. Əhatələndikdən sonra məhdudlaşdırılmış roldakı RLS siyasətləri hər oxuma və yazmanı həmin kiracının sətirləri ilə məhdudlaşdırır. Əhatə iş vahidinə bağlıdır, ona görə də eyni vaxtda işləyən sorğular arasında sızmır.

request ─▶ resolve tenant ─▶ db.WithTenant(tenant) ─▶ queries see only that tenant

İşçilər üçün sistem / keçid rejimi

Bəzi işlər qanuni olaraq kiracılar arasıdır və ya kiracıdan asılı deyil — fon işçiləri, planlaşdırıcılar, outbox və oxşar mexanizmlər. Bunlar üçün gateway sahib poolunda, kiracı üzrə RLS siyasətlərindən kənarda işləyən sistem (keçid) rejimindən istifadə edir ki, infrastruktur tapşırıqları verilənlər toplusu üzrə işləyə bilsin.

[!WARNING] Keçid rejimi yalnız etibarlı daxili işçilər üçündür. İstifadəçinin adından hərəkət edən sorğu emalı kod yolları həmişə məhdudlaşdırılmış, kiracı-əhatəli pool vasitəsilə işləməlidir — heç vaxt keçid yolu ilə deyil.

Migrasiyalar sahib poolunda işləyir

Sxem dəyişiklikləri məhdudlaşdırılmış rolun malik olmadığı imtiyazlar tələb edir, ona görə də migrasiyalar həmişə sahib poolunda (AIHUMMER_DATABASE_URL), məsləhət kilidi altında, başlanğıcda işləyir. Məhdudlaşdırılmış aihummer_app rolu yalnız adi tətbiq trafiki üçün istifadə olunur. Bu, imtiyaz ayrılığını təmiz saxlayır: sxem dəyişdirən əməliyyatlar sahibdən istifadə edir; kiracı məlumatına giriş isə RLS tətbiq edilmiş məhdudlaşdırılmış rolu istifadə edir.

Sonra hara