{"title":"Wielodostępność i izolacja","slug":"multi-tenancy","category":"concepts","summary":"Jak Synapse izoluje dane między użytkownikami i umysłami — wyjaśnione granice bezpieczeństwa.","audience":["human","llm"],"tags":["concept","multi-tenancy","security","isolation"],"difficulty":"intermediate","updated":"2026-06-27","word_count":532,"read_minutes":3,"lang":"pl","translated":true,"requested_lang":"pl","content_markdown":"\n# Wielodostępność i izolacja\n\nSynapse jest wielodostępny: wielu użytkowników, każdy z wieloma umysłami, w pełni\nodizolowanych od siebie. Ta strona wyjaśnia model izolacji.\n\n## Hierarchia dzierżawców\n\n```\nSynapse Instance\n  │\n  ├── User Account 1 (email: alice@example.com)\n  │   ├── Mind A (Mind Key mk_aaa...)\n  │   │   ├── Memories (only accessible via mk_aaa...)\n  │   │   ├── Tasks\n  │   │   └── Chat\n  │   └── Mind B (Mind Key mk_bbb...)\n  │       └── ... (isolated from Mind A)\n  │\n  ├── User Account 2 (email: bob@example.com)\n  │   └── Mind C (Mind Key mk_ccc...)\n  │       └── ... (isolated from Alice's minds)\n  │\n  └── ... (more users)\n```\n\n## Poziomy izolacji\n\n### Poziom 1: Izolacja użytkownika\n\nKażde konto użytkownika jest izolowane. Alice nie może:\n\n- Widzieć umysłów Boba\n- Dostać się do wspomnień Boba (nawet ze swoim JWT)\n- Wylistować informacji o koncie Boba\n\nWymuszane przez: kolumna `user_id` we wszystkich tabelach, JWT zawiera\n`user_id`, wszystkie zapytania filtrują po `user_id`.\n\n### Poziom 2: Izolacja umysłu\n\nW obrębie użytkownika każdy umysł jest izolowany. Umysł A nie może:\n\n- Widzieć wspomnień umysłu B\n- Dostać się do zadań, czatu, skryptów umysłu B\n\nWymuszane przez: kolumna `mind_id` we wszystkich tabelach danych, Mind Key\nzawiera `mind_id`, wszystkie zapytania filtrują po `mind_id`.\n\n> [!CRITICAL]\n> Izolacja Mind Key jest główną granicą bezpieczeństwa. Wyciekły Mind Key daje\n> pełny dostęp do danych tego umysłu — ale TYLKO tego umysłu.\n\n## Tokeny autoryzacyjne\n\n| Token | Zakres | Do czego ma dostęp |\n|-------|-------|-------------------|\n| Mind Key | Pojedynczy umysł | Tylko dane tego umysłu |\n| JWT | Konto użytkownika | Zarządzanie kontem (tworzenie/lista/usuwanie umysłów) |\n| Computer Token | Pojedynczy komputer | Polecenia tego komputera |\n\n## Dostęp między umysłami\n\n### W obrębie tego samego użytkownika\n\nUżytkownik ma dostęp do wszystkich swoich umysłów przez JWT (np. `GET /minds`\nwylistowuje wszystkie). Aby jednak odczytać/zapisać dane pamięci, potrzebny jest\nkonkretny Mind Key.\n\n### Między użytkownikami\n\nUżytkownicy nie mają dostępu do danych innych — CHYBA że jawnie udostępnią umysł\nprzez Sharing API:\n\n```bash\n# Alice udostępnia umysł A Bobowi\ncurl -X POST https://synapse.schaefer.zone/sharing \\\n  -H \"Authorization: Bearer ALICE_JWT\" \\\n  -d '{\"mind_id\": \"m_aaa\", \"email\": \"bob@example.com\", \"role\": \"read\"}'\n```\n\nPo udostępnieniu Bob ma dostęp do umysłu A przez swój JWT (tylko do odczytu, jeśli\n`role=read`).\n\n## Granice bezpieczeństwa\n\n```\n┌─────────────────────────────────────────────────┐\n│              Synapse Instance                    │\n│  ┌─────────────────────────────────────────┐    │\n│  │         User Account Boundary           │    │\n│  │  ┌──────────────┐  ┌──────────────┐    │    │\n│  │  │  Mind Bound. │  │  Mind Bound. │    │    │\n│  │  │  (Mind Key)  │  │  (Mind Key)  │    │    │\n│  │  │              │  │              │    │    │\n│  │  │  Memories    │  │  Memories    │    │    │\n│  │  │  Tasks       │  │  Tasks       │    │    │\n│  │  │  Chat        │  │  Chat        │    │    │\n│  │  │  Scripts     │  │  Scripts     │    │    │\n│  │  └──────────────┘  └──────────────┘    │    │\n│  └─────────────────────────────────────────┘    │\n└─────────────────────────────────────────────────┘\n```\n\n## Typowe wzorce wielodostępności\n\n### Wzorzec 1: pojedynczy użytkownik, pojedynczy umysł\n\nNajczęstszy dla indywidualnych użytkowników agentów LLM.\n\n- 1 konto użytkownika\n- 1 umysł\n- 1 Mind Key\n- Wszystkie wspomnienia w jednym zakresie\n\n### Wzorzec 2: pojedynczy użytkownik, wiele umysłów\n\nDla użytkowników z wieloma kontekstami (praca, życie prywatne, projekty).\n\n- 1 konto użytkownika\n- N umysłów (np. „work\", „personal\", „project-x\")\n- N Mind Key\n- Każda sesja LLM używa jednego Mind Key\n\n### Wzorzec 3: współdzielony umysł zespołu\n\nDla zespołów współpracujących nad projektem.\n\n- Jeden użytkownik tworzy umysł (otrzymuje Mind Key)\n- Twórca udostępnia członkom zespołu przez JWT\n- Wszyscy członkowie zespołu mają dostęp przez JWT (lub współdzielony Mind Key)\n\n> [!WARNING]\n> Współdzielenie Mind Key daje pełny dostęp do odczytu i zapisu. Do współpracy\n> zespołu preferować Sharing API (oparte na JWT) zamiast bezpośredniego\n> współdzielenia Mind Key.\n\n### Wzoczec 4: dostawca SaaS\n\nDla aplikacji osadzających Synapse jako warstwę pamięci.\n\n- Każdy klient = 1 konto użytkownika\n- Każdy projekt klienta = 1 umysł\n- Aplikacja przechowuje Mind Key per klient/projekt\n- Pełna izolacja między klientami\n\n## Weryfikacja izolacji\n\n### Test: Mind Key nie ma dostępu do innych umysłów\n\n```bash\n# Klucz umysłu A nie może odczytać wspomnień umysłu B\ncurl -H \"Authorization: Bearer mk_aaa...\" \\\n     \"https://synapse.schaefer.zone/memory/search?q=test\"\n# Zwraca tylko wspomnienia umysłu A\n\ncurl -H \"Authorization: Bearer mk_bbb...\" \\\n     \"https://synapse.schaefer.zone/memory/search?q=test\"\n# Zwraca tylko wspomnienia umysłu B (różne wyniki)\n```\n\n### Test: JWT nie może odczytać danych pamięci bezpośrednio\n\n```bash\n# JWT może wylistować umysły\ncurl -H \"Authorization: Bearer YOUR_JWT\" \\\n     https://synapse.schaefer.zone/minds\n# Zwraca: listę umysłów\n\n# JWT NIE MOŻE odczytać wspomnień (potrzebny Mind Key)\ncurl -H \"Authorization: Bearer YOUR_JWT\" \\\n     https://synapse.schaefer.zone/memory/recall\n# Zwraca: 401 Unauthorized\n```\n\n## Najlepsze praktyki\n\n> [!TIP]\n> - **Używać jednego umysłu na projekt/kontekst** — izolacja jest sojusznikiem\n> - **Nigdy nie współdzielić Mind Key** — zamiast tego używać Sharing API\n> - **Rotować Mind Key** w razie kompromitacji (usunąć umysł, utworzyć nowy)\n> - **Audytować współdzielone umysły** — okresowo przeglądać `GET /sharing`\n> - **Używać JWT dla interfejsu ludzkiego** — nigdy nie udostępniać Mind Key użytkownikom końcowym\n\n## Następne kroki\n\n- [Autoryzacja](/docs/getting-started/authentication)\n- [Mind Key vs JWT](/docs/getting-started/mind-key-vs-jwt)\n- [Architektura](/docs/concepts/architecture)\n","content_html":"<h1>Wielodostępność i izolacja</h1>\n<p>Synapse jest wielodostępny: wielu użytkowników, każdy z wieloma umysłami, w pełni\nodizolowanych od siebie. Ta strona wyjaśnia model izolacji.</p>\n<h2>Hierarchia dzierżawców</h2>\n<pre><code class=\"hljs language-plaintext\">Synapse Instance\n  │\n  ├── User Account 1 (email: alice@example.com)\n  │   ├── Mind A (Mind Key mk_aaa...)\n  │   │   ├── Memories (only accessible via mk_aaa...)\n  │   │   ├── Tasks\n  │   │   └── Chat\n  │   └── Mind B (Mind Key mk_bbb...)\n  │       └── ... (isolated from Mind A)\n  │\n  ├── User Account 2 (email: bob@example.com)\n  │   └── Mind C (Mind Key mk_ccc...)\n  │       └── ... (isolated from Alice&#x27;s minds)\n  │\n  └── ... (more users)</code></pre><h2>Poziomy izolacji</h2>\n<h3>Poziom 1: Izolacja użytkownika</h3>\n<p>Każde konto użytkownika jest izolowane. Alice nie może:</p>\n<ul>\n<li>Widzieć umysłów Boba</li>\n<li>Dostać się do wspomnień Boba (nawet ze swoim JWT)</li>\n<li>Wylistować informacji o koncie Boba</li>\n</ul>\n<p>Wymuszane przez: kolumna <code>user_id</code> we wszystkich tabelach, JWT zawiera\n<code>user_id</code>, wszystkie zapytania filtrują po <code>user_id</code>.</p>\n<h3>Poziom 2: Izolacja umysłu</h3>\n<p>W obrębie użytkownika każdy umysł jest izolowany. Umysł A nie może:</p>\n<ul>\n<li>Widzieć wspomnień umysłu B</li>\n<li>Dostać się do zadań, czatu, skryptów umysłu B</li>\n</ul>\n<p>Wymuszane przez: kolumna <code>mind_id</code> we wszystkich tabelach danych, Mind Key\nzawiera <code>mind_id</code>, wszystkie zapytania filtrują po <code>mind_id</code>.</p>\n<div class=\"callout callout-critical\">Izolacja Mind Key jest główną granicą bezpieczeństwa. Wyciekły Mind Key daje\npełny dostęp do danych tego umysłu — ale TYLKO tego umysłu.</div><h2>Tokeny autoryzacyjne</h2>\n<table>\n<thead>\n<tr>\n<th>Token</th>\n<th>Zakres</th>\n<th>Do czego ma dostęp</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Mind Key</td>\n<td>Pojedynczy umysł</td>\n<td>Tylko dane tego umysłu</td>\n</tr>\n<tr>\n<td>JWT</td>\n<td>Konto użytkownika</td>\n<td>Zarządzanie kontem (tworzenie/lista/usuwanie umysłów)</td>\n</tr>\n<tr>\n<td>Computer Token</td>\n<td>Pojedynczy komputer</td>\n<td>Polecenia tego komputera</td>\n</tr>\n</tbody></table>\n<h2>Dostęp między umysłami</h2>\n<h3>W obrębie tego samego użytkownika</h3>\n<p>Użytkownik ma dostęp do wszystkich swoich umysłów przez JWT (np. <code>GET /minds</code>\nwylistowuje wszystkie). Aby jednak odczytać/zapisać dane pamięci, potrzebny jest\nkonkretny Mind Key.</p>\n<h3>Między użytkownikami</h3>\n<p>Użytkownicy nie mają dostępu do danych innych — CHYBA że jawnie udostępnią umysł\nprzez Sharing API:</p>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># Alice udostępnia umysł A Bobowi</span>\ncurl -X POST https://synapse.schaefer.zone/sharing \\\n  -H <span class=\"hljs-string\">&quot;Authorization: Bearer ALICE_JWT&quot;</span> \\\n  -d <span class=\"hljs-string\">&#x27;{&quot;mind_id&quot;: &quot;m_aaa&quot;, &quot;email&quot;: &quot;bob@example.com&quot;, &quot;role&quot;: &quot;read&quot;}&#x27;</span></code></pre><p>Po udostępnieniu Bob ma dostęp do umysłu A przez swój JWT (tylko do odczytu, jeśli\n<code>role=read</code>).</p>\n<h2>Granice bezpieczeństwa</h2>\n<pre><code class=\"hljs language-plaintext\">┌─────────────────────────────────────────────────┐\n│              Synapse Instance                    │\n│  ┌─────────────────────────────────────────┐    │\n│  │         User Account Boundary           │    │\n│  │  ┌──────────────┐  ┌──────────────┐    │    │\n│  │  │  Mind Bound. │  │  Mind Bound. │    │    │\n│  │  │  (Mind Key)  │  │  (Mind Key)  │    │    │\n│  │  │              │  │              │    │    │\n│  │  │  Memories    │  │  Memories    │    │    │\n│  │  │  Tasks       │  │  Tasks       │    │    │\n│  │  │  Chat        │  │  Chat        │    │    │\n│  │  │  Scripts     │  │  Scripts     │    │    │\n│  │  └──────────────┘  └──────────────┘    │    │\n│  └─────────────────────────────────────────┘    │\n└─────────────────────────────────────────────────┘</code></pre><h2>Typowe wzorce wielodostępności</h2>\n<h3>Wzorzec 1: pojedynczy użytkownik, pojedynczy umysł</h3>\n<p>Najczęstszy dla indywidualnych użytkowników agentów LLM.</p>\n<ul>\n<li>1 konto użytkownika</li>\n<li>1 umysł</li>\n<li>1 Mind Key</li>\n<li>Wszystkie wspomnienia w jednym zakresie</li>\n</ul>\n<h3>Wzorzec 2: pojedynczy użytkownik, wiele umysłów</h3>\n<p>Dla użytkowników z wieloma kontekstami (praca, życie prywatne, projekty).</p>\n<ul>\n<li>1 konto użytkownika</li>\n<li>N umysłów (np. „work&quot;, „personal&quot;, „project-x&quot;)</li>\n<li>N Mind Key</li>\n<li>Każda sesja LLM używa jednego Mind Key</li>\n</ul>\n<h3>Wzorzec 3: współdzielony umysł zespołu</h3>\n<p>Dla zespołów współpracujących nad projektem.</p>\n<ul>\n<li>Jeden użytkownik tworzy umysł (otrzymuje Mind Key)</li>\n<li>Twórca udostępnia członkom zespołu przez JWT</li>\n<li>Wszyscy członkowie zespołu mają dostęp przez JWT (lub współdzielony Mind Key)</li>\n</ul>\n<div class=\"callout callout-warn\">Współdzielenie Mind Key daje pełny dostęp do odczytu i zapisu. Do współpracy\nzespołu preferować Sharing API (oparte na JWT) zamiast bezpośredniego\nwspółdzielenia Mind Key.</div><h3>Wzoczec 4: dostawca SaaS</h3>\n<p>Dla aplikacji osadzających Synapse jako warstwę pamięci.</p>\n<ul>\n<li>Każdy klient = 1 konto użytkownika</li>\n<li>Każdy projekt klienta = 1 umysł</li>\n<li>Aplikacja przechowuje Mind Key per klient/projekt</li>\n<li>Pełna izolacja między klientami</li>\n</ul>\n<h2>Weryfikacja izolacji</h2>\n<h3>Test: Mind Key nie ma dostępu do innych umysłów</h3>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># Klucz umysłu A nie może odczytać wspomnień umysłu B</span>\ncurl -H <span class=\"hljs-string\">&quot;Authorization: Bearer mk_aaa...&quot;</span> \\\n     <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/memory/search?q=test&quot;</span>\n<span class=\"hljs-comment\"># Zwraca tylko wspomnienia umysłu A</span>\n\ncurl -H <span class=\"hljs-string\">&quot;Authorization: Bearer mk_bbb...&quot;</span> \\\n     <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/memory/search?q=test&quot;</span>\n<span class=\"hljs-comment\"># Zwraca tylko wspomnienia umysłu B (różne wyniki)</span></code></pre><h3>Test: JWT nie może odczytać danych pamięci bezpośrednio</h3>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># JWT może wylistować umysły</span>\ncurl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_JWT&quot;</span> \\\n     https://synapse.schaefer.zone/minds\n<span class=\"hljs-comment\"># Zwraca: listę umysłów</span>\n\n<span class=\"hljs-comment\"># JWT NIE MOŻE odczytać wspomnień (potrzebny Mind Key)</span>\ncurl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_JWT&quot;</span> \\\n     https://synapse.schaefer.zone/memory/recall\n<span class=\"hljs-comment\"># Zwraca: 401 Unauthorized</span></code></pre><h2>Najlepsze praktyki</h2>\n<div class=\"callout callout-ok\"></div><h2>Następne kroki</h2>\n<ul>\n<li><a href=\"/docs/getting-started/authentication\">Autoryzacja</a></li>\n<li><a href=\"/docs/getting-started/mind-key-vs-jwt\">Mind Key vs JWT</a></li>\n<li><a href=\"/docs/concepts/architecture\">Architektura</a></li>\n</ul>\n","urls":{"html":"/docs/concepts/multi-tenancy","text":"/docs/concepts/multi-tenancy?format=text","json":"/docs/concepts/multi-tenancy?format=json","llm":"/docs/concepts/multi-tenancy?format=llm"},"translations_available":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}