Skip to main content

Multitenancy & isolation

Hur Synapse isolerar data mellan användare och minds — säkerhetsgränser förklarade.


Multitenancy & isolation

Synapse är multitenant: flera användare, var och en med flera minds, fullständigt isolerade från varandra. Den här sidan förklarar isolationsmodellen.

Klienthierarki

Synapse Instance
  │
  ├── User Account 1 (email: alice@example.com)
  │   ├── Mind A (Mind Key mk_aaa...)
  │   │   ├── Memories (only accessible via mk_aaa...)
  │   │   ├── Tasks
  │   │   └── Chat
  │   └── Mind B (Mind Key mk_bbb...)
  │       └── ... (isolated from Mind A)
  │
  ├── User Account 2 (email: bob@example.com)
  │   └── Mind C (Mind Key mk_ccc...)
  │       └── ... (isolated from Alice's minds)
  │
  └── ... (more users)

Isolationsnivåer

Nivå 1: Användarisolation

Varje användarkonto är isolerat. Alice kan inte:

  • Se Bobs minds
  • Komma åt Bobs minnen (även med sin JWT)
  • Lista Bobs kontoinformation

Upprätthålls av: user_id-kolumn på alla tabeller, JWT innehåller user_id, alla frågor filtrerar efter user_id.

Nivå 2: Mind-isolation

Inom en användare är varje mind isolerad. Mind A kan inte:

  • Se Mind B:s minnen
  • Komma åt Mind B:s uppgifter, chatt, skript

Upprätthålls av: mind_id-kolumn på alla datatabeller, Mind Key innehåller mind_id, alla frågor filtrerar efter mind_id.

Mind Key-isolation är den primära säkerhetsgränsen. En läckt Mind Key ger full åtkomst till den mindens data — men ENDAST den minden.

Autentiseringstoken

Token Omfattning Vad den kan komma åt
Mind Key Enskild mind Endast den mindens data
JWT Användarkonto Kontohantering (skapa/lista/ta bort minds)
Computer Token Enskild dator Den datorns kommandon

Åtkomst över mind-gränser

Inom samma användare

Användaren kan komma åt alla sina minds via JWT (t.ex. GET /minds listar alla). Men för att läsa/skriva minnesdata behöver de specifik Mind Key.

Mellan användare

Användare kan inte komma åt varandras data — OM INTE de uttryckligen delar en mind via Sharing API:

# Alice shares Mind A with Bob
curl -X POST https://synapse.schaefer.zone/sharing \
  -H "Authorization: Bearer ALICE_JWT" \
  -d '{"mind_id": "m_aaa", "email": "bob@example.com", "role": "read"}'

Efter delning kan Bob komma åt Mind A via sin JWT (skrivskyddad om role=read).

Säkerhetsgränser

┌─────────────────────────────────────────────────┐
│              Synapse Instance                    │
│  ┌─────────────────────────────────────────┐    │
│  │         User Account Boundary           │    │
│  │  ┌──────────────┐  ┌──────────────┐    │    │
│  │  │  Mind Bound. │  │  Mind Bound. │    │    │
│  │  │  (Mind Key)  │  │  (Mind Key)  │    │    │
│  │  │              │  │              │    │    │
│  │  │  Memories    │  │  Memories    │    │    │
│  │  │  Tasks       │  │  Tasks       │    │    │
│  │  │  Chat        │  │  Chat        │    │    │
│  │  │  Scripts     │  │  Scripts     │    │    │
│  │  └──────────────┘  └──────────────┘    │    │
│  └─────────────────────────────────────────┘    │
└─────────────────────────────────────────────────┘

Vanliga multitenancy-mönster

Mönster 1: Enskild användare, enskild mind

Vanligast för enskilda LLM-agentanvändare.

  • 1 användarkonto
  • 1 mind
  • 1 Mind Key
  • Alla minnen i en omfattning

Mönster 2: Enskild användare, flera minds

För användare med flera kontexter (arbete, personligt, projekt).

  • 1 användarkonto
  • N minds (t.ex. "work", "personal", "project-x")
  • N Mind Keys
  • Varje LLM-session använder en Mind Key

Mönster 3: Team-delad mind

För team som samarbetar kring ett projekt.

  • 1 användare skapar minden (får Mind Key)
  • Skaparen delar med teammedlemmar via JWT
  • Alla teammedlemmar kommer åt via JWT (eller delad Mind Key)
Att dela en Mind Key ger full läs/skriv-åtkomst. För teamsamarbete, föredra Sharing API (JWT-baserad) framom att dela Mind Keys direkt.

Mönster 4: SaaS-leverantör

För appar som bäddar in Synapse som sitt minneslager.

  • Varje kund = 1 användarkonto
  • Varje kundprojekt = 1 mind
  • Appen lagrar Mind Keys per kund/projekt
  • Full isolation mellan kunder

Verifiering av isolation

Test: Mind Key kan inte komma åt andra minds

# Mind A's key cannot read Mind B's memories
curl -H "Authorization: Bearer mk_aaa..." \
     "https://synapse.schaefer.zone/memory/search?q=test"
# Returns only Mind A's memories

curl -H "Authorization: Bearer mk_bbb..." \
     "https://synapse.schaefer.zone/memory/search?q=test"
# Returns only Mind B's memories (different results)

Test: JWT kan inte läsa minnesdata direkt

# JWT can list minds
curl -H "Authorization: Bearer YOUR_JWT" \
     https://synapse.schaefer.zone/minds
# Returns: list of minds

# JWT CANNOT read memories (need Mind Key)
curl -H "Authorization: Bearer YOUR_JWT" \
     https://synapse.schaefer.zone/memory/recall
# Returns: 401 Unauthorized

Bästa praxis

Nästa steg