{"title":"Çok Kiracılılık & İzolasyon","slug":"multi-tenancy","category":"concepts","summary":"Synapse'in kullanıcılar ve mind'ler arasında verileri nasıl izole ettiği — güvenlik sınırları açıklaması.","audience":["human","llm"],"tags":["concept","multi-tenancy","security","isolation"],"difficulty":"intermediate","updated":"2026-06-27","word_count":499,"read_minutes":2,"lang":"tr","translated":true,"requested_lang":"tr","content_markdown":"\n# Çok Kiracılılık & İzolasyon\n\nSynapse çok kiracılıdır: birden çok kullanıcı, her biri birden çok mind ile, birbirinden tamamen izole. Bu sayfa izolasyon modelini açıklar.\n\n## Kiracı Hiyerarşisi\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## İzolasyon Düzeyleri\n\n### Düzey 1: Kullanıcı İzolasyonu\n\nHer kullanıcı hesabı izoledir. Alice şunları yapamaz:\n\n- Bob'un mind'lerini görmek\n- Bob'un belleklerine erişmek (JWT'si ile bile)\n- Bob'un hesap bilgilerini listelemek\n\nŞununla uygulanır: tüm tablolarda `user_id` sütunu, JWT `user_id` içerir, tüm sorgular `user_id` ile filtrelenir.\n\n### Düzey 2: Mind İzolasyonu\n\nBir kullanıcı içinde her mind izoledir. Mind A şunları yapamaz:\n\n- Mind B'nin belleklerini görmek\n- Mind B'nin görevlerine, sohbetine, betiklerine erişmek\n\nŞununla uygulanır: tüm veri tablolarında `mind_id` sütunu, Mind Key `mind_id` içerir, tüm sorgular `mind_id` ile filtrelenir.\n\n> [!CRITICAL]\n> Mind Key izolasyonu birincil güvenlik sınırıdır. Sızdırılan bir Mind Key, o mind'in verilerine tam erişim sağlar — ama SADECE o mind'e.\n\n## Kimlik Doğrulama Token'ları\n\n| Token | Kapsam | Neyi erişebilir |\n|-------|-------|-------------------|\n| Mind Key | Tek mind | Yalnızca o mind'in verileri |\n| JWT | Kullanıcı hesabı | Hesap yönetimi (mind oluşturma/listeleme/silme) |\n| Computer Token | Tek bilgisayar | O bilgisayarın komutları |\n\n## Mind'ler Arası Erişim\n\n### Aynı kullanıcı içinde\n\nKullanıcı JWT ile tüm mind'lerine erişebilir (örn. `GET /minds` hepsini listeler). Ancak bellek verilerini okumak/yazmak için belirli Mind Key gerekir.\n\n### Kullanıcılar arası\n\nKullanıcılar birbirlerinin verilerine erişemez — Sharing API ile açıkça bir mind paylaşmadıkça:\n\n```bash\n# Alice shares Mind A with Bob\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\nPaylaşımdan sonra Bob, JWT'si ile Mind A'ya erişebilir (`role=read` ise salt okunur).\n\n## Güvenlik Sınırları\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## Yaygın Çok Kiracılılık Desenleri\n\n### Desen 1: Tek Kullanıcı, Tek Mind\n\nBireysel LLM ajan kullanıcıları için en yaygın olan.\n\n- 1 kullanıcı hesabı\n- 1 mind\n- 1 Mind Key\n- Tüm bellekler tek bir kapsamda\n\n### Desen 2: Tek Kullanıcı, Birden Çok Mind\n\nBirden çok bağlamı olan kullanıcılar için (iş, kişisel, projeler).\n\n- 1 kullanıcı hesabı\n- N mind (örn. \"work\", \"personal\", \"project-x\")\n- N Mind Key\n- Her LLM oturumu bir Mind Key kullanır\n\n### Desen 3: Ekip Paylaşımlı Mind\n\nBir proje üzerinde işbirliği yapan ekipler için.\n\n- 1 kullanıcı mind'i oluşturur (Mind Key alır)\n- Oluşturucu, ekip üyeleriyle JWT üzerinden paylaşır\n- Tüm ekip üyeleri JWT (veya paylaşılan Mind Key) ile erişir\n\n> [!WARNING]\n> Bir Mind Key paylaşmak tam okuma/yazma erişimi verir. Ekip işbirliği için doğrudan Mind Key paylaşmak yerine Sharing API'yi (JWT tabanlı) tercih edin.\n\n### Desen 4: SaaS Sağlayıcısı\n\nSynapse'i bellek katmanı olarak gömen uygulamalar için.\n\n- Her müşteri = 1 kullanıcı hesabı\n- Her müşteri projesi = 1 mind\n- Uygulama Mind Key'leri müşteri/proje başına saklar\n- Müşteriler arasında tam izolasyon\n\n## İzolasyon Doğrulaması\n\n### Test: Mind Key başka mind'lere erişemez\n\n```bash\n# Mind A's key cannot read Mind B's memories\ncurl -H \"Authorization: Bearer mk_aaa...\" \\\n     \"https://synapse.schaefer.zone/memory/search?q=test\"\n# Returns only Mind A's memories\n\ncurl -H \"Authorization: Bearer mk_bbb...\" \\\n     \"https://synapse.schaefer.zone/memory/search?q=test\"\n# Returns only Mind B's memories (different results)\n```\n\n### Test: JWT doğrudan bellek verilerini okuyamaz\n\n```bash\n# JWT can list minds\ncurl -H \"Authorization: Bearer YOUR_JWT\" \\\n     https://synapse.schaefer.zone/minds\n# Returns: list of minds\n\n# JWT CANNOT read memories (need Mind Key)\ncurl -H \"Authorization: Bearer YOUR_JWT\" \\\n     https://synapse.schaefer.zone/memory/recall\n# Returns: 401 Unauthorized\n```\n\n## En İyi Uygulamalar\n\n> [!TIP]\n> - **Proje/bağlam başına bir mind kullanın** — izolasyon dostunuzdur\n> - **Mind Key'leri asla paylaşmayın** — bunun yerine Sharing API'yi kullanın\n> - **Tehlikeye girerse Mind Key'leri döndürün** (mind'i sil, yeni oluştur)\n> - **Paylaşılan mind'leri denetleyin** — `GET /sharing`'i periyodik olarak inceleyin\n> - **İnsan arayüzü için JWT kullanın** — Mind Key'leri son kullanıcılara asla göstermeyin\n\n## Sonraki Adımlar\n\n- [Kimlik Doğrulama](/docs/getting-started/authentication)\n- [Mind Key ve JWT](/docs/getting-started/mind-key-vs-jwt)\n- [Mimari](/docs/concepts/architecture)\n","content_html":"<h1>Çok Kiracılılık &amp; İzolasyon</h1>\n<p>Synapse çok kiracılıdır: birden çok kullanıcı, her biri birden çok mind ile, birbirinden tamamen izole. Bu sayfa izolasyon modelini açıklar.</p>\n<h2>Kiracı Hiyerarşisi</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>İzolasyon Düzeyleri</h2>\n<h3>Düzey 1: Kullanıcı İzolasyonu</h3>\n<p>Her kullanıcı hesabı izoledir. Alice şunları yapamaz:</p>\n<ul>\n<li>Bob&#39;un mind&#39;lerini görmek</li>\n<li>Bob&#39;un belleklerine erişmek (JWT&#39;si ile bile)</li>\n<li>Bob&#39;un hesap bilgilerini listelemek</li>\n</ul>\n<p>Şununla uygulanır: tüm tablolarda <code>user_id</code> sütunu, JWT <code>user_id</code> içerir, tüm sorgular <code>user_id</code> ile filtrelenir.</p>\n<h3>Düzey 2: Mind İzolasyonu</h3>\n<p>Bir kullanıcı içinde her mind izoledir. Mind A şunları yapamaz:</p>\n<ul>\n<li>Mind B&#39;nin belleklerini görmek</li>\n<li>Mind B&#39;nin görevlerine, sohbetine, betiklerine erişmek</li>\n</ul>\n<p>Şununla uygulanır: tüm veri tablolarında <code>mind_id</code> sütunu, Mind Key <code>mind_id</code> içerir, tüm sorgular <code>mind_id</code> ile filtrelenir.</p>\n<div class=\"callout callout-critical\">Mind Key izolasyonu birincil güvenlik sınırıdır. Sızdırılan bir Mind Key, o mind'in verilerine tam erişim sağlar — ama SADECE o mind'e.</div><h2>Kimlik Doğrulama Token&#39;ları</h2>\n<table>\n<thead>\n<tr>\n<th>Token</th>\n<th>Kapsam</th>\n<th>Neyi erişebilir</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Mind Key</td>\n<td>Tek mind</td>\n<td>Yalnızca o mind&#39;in verileri</td>\n</tr>\n<tr>\n<td>JWT</td>\n<td>Kullanıcı hesabı</td>\n<td>Hesap yönetimi (mind oluşturma/listeleme/silme)</td>\n</tr>\n<tr>\n<td>Computer Token</td>\n<td>Tek bilgisayar</td>\n<td>O bilgisayarın komutları</td>\n</tr>\n</tbody></table>\n<h2>Mind&#39;ler Arası Erişim</h2>\n<h3>Aynı kullanıcı içinde</h3>\n<p>Kullanıcı JWT ile tüm mind&#39;lerine erişebilir (örn. <code>GET /minds</code> hepsini listeler). Ancak bellek verilerini okumak/yazmak için belirli Mind Key gerekir.</p>\n<h3>Kullanıcılar arası</h3>\n<p>Kullanıcılar birbirlerinin verilerine erişemez — Sharing API ile açıkça bir mind paylaşmadıkça:</p>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># Alice shares Mind A with Bob</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>Paylaşımdan sonra Bob, JWT&#39;si ile Mind A&#39;ya erişebilir (<code>role=read</code> ise salt okunur).</p>\n<h2>Güvenlik Sınırları</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>Yaygın Çok Kiracılılık Desenleri</h2>\n<h3>Desen 1: Tek Kullanıcı, Tek Mind</h3>\n<p>Bireysel LLM ajan kullanıcıları için en yaygın olan.</p>\n<ul>\n<li>1 kullanıcı hesabı</li>\n<li>1 mind</li>\n<li>1 Mind Key</li>\n<li>Tüm bellekler tek bir kapsamda</li>\n</ul>\n<h3>Desen 2: Tek Kullanıcı, Birden Çok Mind</h3>\n<p>Birden çok bağlamı olan kullanıcılar için (iş, kişisel, projeler).</p>\n<ul>\n<li>1 kullanıcı hesabı</li>\n<li>N mind (örn. &quot;work&quot;, &quot;personal&quot;, &quot;project-x&quot;)</li>\n<li>N Mind Key</li>\n<li>Her LLM oturumu bir Mind Key kullanır</li>\n</ul>\n<h3>Desen 3: Ekip Paylaşımlı Mind</h3>\n<p>Bir proje üzerinde işbirliği yapan ekipler için.</p>\n<ul>\n<li>1 kullanıcı mind&#39;i oluşturur (Mind Key alır)</li>\n<li>Oluşturucu, ekip üyeleriyle JWT üzerinden paylaşır</li>\n<li>Tüm ekip üyeleri JWT (veya paylaşılan Mind Key) ile erişir</li>\n</ul>\n<div class=\"callout callout-warn\">Bir Mind Key paylaşmak tam okuma/yazma erişimi verir. Ekip işbirliği için doğrudan Mind Key paylaşmak yerine Sharing API'yi (JWT tabanlı) tercih edin.</div><h3>Desen 4: SaaS Sağlayıcısı</h3>\n<p>Synapse&#39;i bellek katmanı olarak gömen uygulamalar için.</p>\n<ul>\n<li>Her müşteri = 1 kullanıcı hesabı</li>\n<li>Her müşteri projesi = 1 mind</li>\n<li>Uygulama Mind Key&#39;leri müşteri/proje başına saklar</li>\n<li>Müşteriler arasında tam izolasyon</li>\n</ul>\n<h2>İzolasyon Doğrulaması</h2>\n<h3>Test: Mind Key başka mind&#39;lere erişemez</h3>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># Mind A&#x27;s key cannot read Mind B&#x27;s memories</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\"># Returns only Mind A&#x27;s memories</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\"># Returns only Mind B&#x27;s memories (different results)</span></code></pre><h3>Test: JWT doğrudan bellek verilerini okuyamaz</h3>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># JWT can list minds</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\"># Returns: list of minds</span>\n\n<span class=\"hljs-comment\"># JWT CANNOT read memories (need 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\"># Returns: 401 Unauthorized</span></code></pre><h2>En İyi Uygulamalar</h2>\n<div class=\"callout callout-ok\"></div><h2>Sonraki Adımlar</h2>\n<ul>\n<li><a href=\"/docs/getting-started/authentication\">Kimlik Doğrulama</a></li>\n<li><a href=\"/docs/getting-started/mind-key-vs-jwt\">Mind Key ve JWT</a></li>\n<li><a href=\"/docs/concepts/architecture\">Mimari</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"]}