Multi-Tenancy & Cách ly
Cách Synapse cách ly dữ liệu giữa người dùng và mind — giải thích ranh giới bảo mật.
Multi-Tenancy & Cách ly
Synapse là multi-tenant: nhiều người dùng, mỗi người có nhiều mind, hoàn toàn cách ly với nhau. Trang này giải thích mô hình cách ly.
Hệ thống tenant
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)Cấp độ cách ly
Cấp 1: Cách ly người dùng
Mỗi tài khoản người dùng được cách ly. Alice không thể:
- Xem mind của Bob
- Truy cập bộ nhớ của Bob (ngay cả với JWT của cô ấy)
- Liệt kê thông tin tài khoản của Bob
Thực thi bởi: cột user_id trên tất cả bảng, JWT chứa user_id, tất cả truy
vấn lọc theo user_id.
Cấp 2: Cách ly mind
Trong một người dùng, mỗi mind được cách ly. Mind A không thể:
- Xem bộ nhớ của Mind B
- Truy cập tác vụ, chat, script của Mind B
Thực thi bởi: cột mind_id trên tất cả bảng dữ liệu, Mind Key chứa mind_id,
tất cả truy vấn lọc theo mind_id.
Token xác thực
| Token | Phạm vi | Có thể truy cập gì |
|---|---|---|
| Mind Key | Một mind duy nhất | Chỉ dữ liệu mind đó |
| JWT | Tài khoản người dùng | Quản lý tài khoản (tạo/liệt kê/xóa mind) |
| Computer Token | Một máy tính duy nhất | Lệnh của máy tính đó |
Truy cập chéo mind
Trong cùng người dùng
Người dùng có thể truy cập tất cả mind của họ qua JWT (ví dụ GET /minds liệt
kê tất cả). Nhưng để đọc/ghi dữ liệu bộ nhớ, họ cần Mind Key cụ thể.
Giữa người dùng
Người dùng không thể truy cập dữ liệu của nhau — TRỪ KHI họ chia sẻ rõ ràng một mind qua 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"}'Sau khi chia sẻ, Bob có thể truy cập Mind A qua JWT của anh ấy (chỉ đọc nếu
role=read).
Ranh giới bảo mật
┌─────────────────────────────────────────────────┐
│ Synapse Instance │
│ ┌─────────────────────────────────────────┐ │
│ │ User Account Boundary │ │
│ │ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ Mind Bound. │ │ Mind Bound. │ │ │
│ │ │ (Mind Key) │ │ (Mind Key) │ │ │
│ │ │ │ │ │ │ │
│ │ │ Memories │ │ Memories │ │ │
│ │ │ Tasks │ │ Tasks │ │ │
│ │ │ Chat │ │ Chat │ │ │
│ │ │ Scripts │ │ Scripts │ │ │
│ │ └──────────────┘ └──────────────┘ │ │
│ └─────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘Mẫu multi-tenant phổ biến
Mẫu 1: Một người dùng, một mind
Phổ biến nhất cho người dùng LLM agent cá nhân.
- 1 tài khoản người dùng
- 1 mind
- 1 Mind Key
- Tất cả bộ nhớ trong một phạm vi
Mẫu 2: Một người dùng, nhiều mind
Cho người dùng có nhiều ngữ cảnh (công việc, cá nhân, dự án).
- 1 tài khoản người dùng
- N mind (ví dụ "work", "personal", "project-x")
- N Mind Key
- Mỗi phiên LLM sử dụng một Mind Key
Mẫu 3: Mind chung nhóm
Cho nhóm cộng tác trên một dự án.
- 1 người dùng tạo mind (nhận Mind Key)
- Người tạo chia sẻ với thành viên nhóm qua JWT
- Tất cả thành viên nhóm truy cập qua JWT (hoặc Mind Key chung)
Mẫu 4: Nhà cung cấp SaaS
Cho ứng dụng nhúng Synapse làm lớp bộ nhớ.
- Mỗi khách hàng = 1 tài khoản người dùng
- Mỗi dự án khách hàng = 1 mind
- Ứng dụng lưu Mind Key cho mỗi khách hàng/dự án
- Cách ly đầy đủ giữa khách hàng
Xác minh cách ly
Kiểm tra: Mind Key không thể truy cập mind khác
# 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)Kiểm tra: JWT không thể đọc dữ liệu bộ nhớ trực tiếp
# 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