> **Beta Translation:** This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
تفتقر آلية تخزين الاستعلامات الثلاثية الحالية في Neo4j إلى عزل المستخدم/المجموعة، مما يؤدي إلى مشكلة أمنية متعددة المستأجرين. يتم تخزين جميع الثلاثيات في نفس مساحة الرسم البياني دون أي آلية لمنع المستخدمين من الوصول إلى بيانات مستخدمين آخرين أو مزج المجموعات.
على عكس الأنظمة الخلفية الأخرى للتخزين في TrustGraph:
- **Cassandra**: تستخدم مساحات مفاتيح منفصلة لكل مستخدم وجداول لكل مجموعة.
- **مخازن المتجهات** (Milvus, Qdrant, Pinecone): تستخدم مساحات أسماء خاصة بالمجموعة.
- **Neo4j**: تشارك حاليًا جميع البيانات في رسم بياني واحد (ثغرة أمنية).
## البنية الحالية
### نموذج البيانات
- **العقد:** تسمية `:Node` مع خاصية `uri`، تسمية `:Literal` مع خاصية `value`.
- تحتوي رسائل `Triples` على الحقول `metadata.user` و `metadata.collection`.
- تتلقى خدمة التخزين معلومات المستخدم/المجموعة ولكنها تتجاهلها.
- تتوقع خدمة الاستعلام `user` و `collection` في `TriplesQueryRequest` ولكنها تتجاهلهما.
### المشكلة الأمنية الحالية
```cypher
# يمكن لأي مستخدم الاستعلام عن أي بيانات - لا يوجد عزل
MATCH (src:Node)-[rel:Rel]->(dest:Node)
RETURN src.uri, rel.uri, dest.uri
```
## الحل المقترح: التصفية المستندة إلى الخصائص (موصى بها)
### نظرة عامة
إضافة خصائص `user` و `collection` إلى جميع العقد والعلاقات، ثم تصفية جميع العمليات بناءً على هذه الخصائص. يوفر هذا النهج عزلًا قويًا مع الحفاظ على مرونة الاستعلام والتوافق مع الإصدارات السابقة.
### تغييرات نموذج البيانات
#### هيكل العقدة المحسّن
```cypher
// كيانات العقد
CREATE (n:Node {
uri: "http://example.com/entity1",
user: "john_doe",
collection: "production_v1"
})
// كيانات حرفية
CREATE (n:Literal {
value: "literal value",
user: "john_doe",
collection: "production_v1"
})
```
#### هيكل العلاقة المحسّن
```cypher
// العلاقات مع خصائص المستخدم/المجموعة
CREATE (src)-[:Rel {
uri: "http://example.com/predicate1",
user: "john_doe",
collection: "production_v1"
}]->(dest)
```
#### الفهارس المحدثة
```cypher
// فهارس مركبة للتصفية الفعالة
CREATE INDEX node_user_collection_uri FOR (n:Node) ON (n.user, n.collection, n.uri);
CREATE INDEX literal_user_collection_value FOR (n:Literal) ON (n.user, n.collection, n.value);
CREATE INDEX rel_user_collection_uri FOR ()-[r:Rel]-() ON (r.user, r.collection, r.uri);
// الحفاظ على الفهارس الحالية للتوافق مع الإصدارات السابقة (اختياري)
CREATE INDEX Node_uri FOR (n:Node) ON (n.uri);
CREATE INDEX Literal_value FOR (n:Literal) ON (n.value);
CREATE INDEX Rel_uri FOR ()-[r:Rel]-() ON (r.uri);
```
### تنفيذ الخطة
### المرحلة 1: الأساس (الأسبوع 1)
1. [ ] تحديث خدمة التخزين لقبول وتخزين خصائص المستخدم/المجموعة.
2. [ ] إضافة فهارس مركبة للتصفية الفعالة.
3. [ ] تنفيذ طبقة توافق مع الإصدارات السابقة.
4. [ ] إنشاء اختبارات وحدة للوظائف الجديدة.
### المرحلة 2: تحديثات الاستعلام (الأسبوع 2)
1. [ ] تحديث جميع أنماط الاستعلام لتشمل عوامل تصفية المستخدم/المجموعة.
2. [ ] إضافة التحقق من صحة الاستعلامات وعناصر التحكم الأمنية.
3. [ ] تحديث اختبارات التكامل.
4. [ ] اختبار الأداء مع الاستعلامات المفلترة.
### المرحلة 3: الترحيل والنشر (الأسبوع 3)
1. [ ] إنشاء نصوص ترحيل للبيانات لمثيل Neo4j الحالي.
2. [ ] وثائق النشر والتعليمات البرمجية التشغيلية.
3. [ ] المراقبة والتنبيه لانتهاكات العزل.
4. [ ] اختبار شامل مع سيناريوهات متعددة للمستخدمين/المجموعات.
### المرحلة 4: التقوية (الأسبوع 4)
1. [ ] إزالة وضع التوافق مع الإصدارات القديمة.
2. [ ] إضافة تسجيل تدقيق شامل.
3. [ ] مراجعة أمنية واختبار اختراق.
4. [ ] تحسين الأداء.
### استراتيجية الاختبار
### اختبارات الوحدة
```python
def test_user_collection_isolation():
# تخزين ثلاثيات لمستخدم1/مجموعة1
processor.store_triples(triples_user1_coll1)
# تخزين ثلاثيات لمستخدم2/مجموعة2
processor.store_triples(triples_user2_coll2)
# يجب أن تعرض الاستعلامات كمستخدم1 فقط بيانات مستخدم1
| استعلامات معقدة متعددة المجموعات | متوسط | متوسط | توثيق أنماط الاستعلام، توفير أمثلة |
### معايير النجاح
1.**الأمان**: صفر من عمليات الوصول إلى بيانات المستخدم عبر المستخدمين في الإنتاج.
2.**الأداء**: أقل من 10٪ من تأثير أداء الاستعلام مقارنة بالاستعلامات غير المفلترة.
3.**الترحيل**: تم ترحيل 100٪ من البيانات الحالية بنجاح بدون فقدان.
4.**سهولة الاستخدام**: تعمل جميع أنماط الاستعلام الموجودة مع سياق المستخدم/المجموعة.
5.**الامتثال**: سجل تدقيق شامل لعمليات الوصول إلى بيانات المستخدم/المجموعة.
## الخلاصة
يوفر النهج القائم على التصفية المستندة إلى الخصائص أفضل توازن بين الأمان والأداء وقابلية الصيانة لإضافة عزل المستخدم/المجموعة إلى Neo4j. إنه يتماشى مع أنماط متعددة المستأجرين الحالية في TrustGraph مع الاستفادة من نقاط قوة Neo4j في استعلامات الرسم البياني والفهرسة.
تضمن هذه الحل أن يلبي الخلفية Neo4 لـ TrustGraph نفس معايير الأمان مثل الأنظمة الخلفية الأخرى للتخزين، مما يمنع ثغرات أمنية لعزل البيانات مع الحفاظ على المرونة وقوة استعلامات الرسم البياني.