11 KiB
| layout | title | parent |
|---|---|---|
| default | دعم عزل المستخدم/المجموعة في Neo4j | Arabic (Beta) |
دعم عزل المستخدم/المجموعة في Neo4j
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. - العلاقات: تسمية
:Relمع خاصيةuri. - الفهارس:
Node.uri,Literal.value,Rel.uri.
تدفق الرسائل
- تحتوي رسائل
Triplesعلى الحقولmetadata.userوmetadata.collection. - تتلقى خدمة التخزين معلومات المستخدم/المجموعة ولكنها تتجاهلها.
- تتوقع خدمة الاستعلام
userوcollectionفيTriplesQueryRequestولكنها تتجاهلهما.
المشكلة الأمنية الحالية
# يمكن لأي مستخدم الاستعلام عن أي بيانات - لا يوجد عزل
MATCH (src:Node)-[rel:Rel]->(dest:Node)
RETURN src.uri, rel.uri, dest.uri
الحل المقترح: التصفية المستندة إلى الخصائص (موصى بها)
نظرة عامة
إضافة خصائص user و collection إلى جميع العقد والعلاقات، ثم تصفية جميع العمليات بناءً على هذه الخصائص. يوفر هذا النهج عزلًا قويًا مع الحفاظ على مرونة الاستعلام والتوافق مع الإصدارات السابقة.
تغييرات نموذج البيانات
هيكل العقدة المحسّن
// كيانات العقد
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"
})
هيكل العلاقة المحسّن
// العلاقات مع خصائص المستخدم/المجموعة
CREATE (src)-[:Rel {
uri: "http://example.com/predicate1",
user: "john_doe",
collection: "production_v1"
}]->(dest)
الفهارس المحدثة
// فهارس مركبة للتصفية الفعالة
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)
- تحديث خدمة التخزين لقبول وتخزين خصائص المستخدم/المجموعة.
- إضافة فهارس مركبة للتصفية الفعالة.
- تنفيذ طبقة توافق مع الإصدارات السابقة.
- إنشاء اختبارات وحدة للوظائف الجديدة.
المرحلة 2: تحديثات الاستعلام (الأسبوع 2)
- تحديث جميع أنماط الاستعلام لتشمل عوامل تصفية المستخدم/المجموعة.
- إضافة التحقق من صحة الاستعلامات وعناصر التحكم الأمنية.
- تحديث اختبارات التكامل.
- اختبار الأداء مع الاستعلامات المفلترة.
المرحلة 3: الترحيل والنشر (الأسبوع 3)
- إنشاء نصوص ترحيل للبيانات لمثيل Neo4j الحالي.
- وثائق النشر والتعليمات البرمجية التشغيلية.
- المراقبة والتنبيه لانتهاكات العزل.
- اختبار شامل مع سيناريوهات متعددة للمستخدمين/المجموعات.
المرحلة 4: التقوية (الأسبوع 4)
- إزالة وضع التوافق مع الإصدارات القديمة.
- إضافة تسجيل تدقيق شامل.
- مراجعة أمنية واختبار اختراق.
- تحسين الأداء.
استراتيجية الاختبار
اختبارات الوحدة
def test_user_collection_isolation():
# تخزين ثلاثيات لمستخدم1/مجموعة1
processor.store_triples(triples_user1_coll1)
# تخزين ثلاثيات لمستخدم2/مجموعة2
processor.store_triples(triples_user2_coll2)
# يجب أن تعرض الاستعلامات كمستخدم1 فقط بيانات مستخدم1
results = processor.query_triples(query_user1_coll1)
assert all_results_belong_to_user1_coll1(results)
# يجب أن تعرض الاستعلامات كمستخدم2 فقط بيانات مستخدم2
results = processor.query_triples(query_user2_coll2)
assert all_results_belong_to_user2_coll2(results)
اختبارات التكامل
- سيناريوهات متعددة المستخدمين مع بيانات متداخلة.
- استعلامات عبر مجموعات (يجب أن تفشل).
- اختبارات الترحيل مع البيانات الحالية.
- معايير أداء مع مجموعات بيانات كبيرة.
اختبارات الأمان
- محاولة الاستعلام عن بيانات مستخدمين آخرين.
- هجمات SQL injection على معلمات المستخدم/المجموعة.
- التحقق من العزل الكامل في ظل أنماط استعلام مختلفة.
اعتبارات الأداء
استراتيجية الفهرس
- فهارس مركبة على
(user, collection, uri)للتصفية المثلى. - ضع في اعتبارك الفهارس الجزئية إذا كانت بعض المجموعات أكبر بكثير.
- مراقبة استخدام الفهرس وأداء الاستعلام.
تحسين الاستعلام
- استخدم EXPLAIN للتحقق من استخدام الفهرس في الاستعلامات المفلترة.
- ضع في اعتبارك تخزين نتائج الاستعلام مؤقتًا للبيانات التي يتم الوصول إليها بشكل متكرر.
- قم بتوصيف استخدام الذاكرة مع عدد كبير من المستخدمين/المجموعات.
قابلية التوسع
- تخلق كل مجموعة مستخدم/مجموعة جزيرة بيانات منفصلة.
- مراقبة حجم قاعدة البيانات واستخدام مجموعة الاتصال.
- ضع في اعتبارك استراتيجيات التوسع الأفقي إذا لزم الأمر.
الأمن والامتثال
ضمانات العزل
- الفيزيائية: جميع بيانات المستخدم مخزنة مع خصائص مستخدم/مجموعة صريحة.
- المنطقية: يتم تصفية جميع الاستعلامات بواسطة سياق المستخدم/المجموعة.
- التحكم في الوصول: التحقق من الصحة على مستوى الخدمة يمنع الوصول غير المصرح به.
متطلبات التدقيق
- تسجيل جميع عمليات الوصول إلى البيانات مع سياق المستخدم/المجموعة.
- تتبع أنشطة الترحيل وحركات البيانات.
- المراقبة بحثًا عن محاولات انتهاك العزل.
اعتبارات الامتثال
- GDPR: القدرة المحسنة على تحديد موقع بيانات المستخدم وحذفها.
- SOC2: ضوابط واضحة لعزل المستأجر والوصول.
- HIPAA: عزل قوي للمستأجر لبيانات الرعاية الصحية.
المخاطر والتخفيف
| المخاطر | التأثير | الاحتمالية | التخفيف |
|---|---|---|---|
| الاستعلام المفقود لعامل تصفية المستخدم/المجموعة | مرتفع | متوسط | التحقق الإلزامي، اختبار شامل |
| تدهور الأداء | متوسط | منخفض | تحسين الفهرس، توصيف الاستعلام |
| تلف بيانات الترحيل | مرتفع | منخفض | استراتيجية النسخ الاحتياطي، إجراءات التراجع |
| استعلامات معقدة متعددة المجموعات | متوسط | متوسط | توثيق أنماط الاستعلام، توفير أمثلة |
معايير النجاح
- الأمان: صفر من عمليات الوصول إلى بيانات المستخدم عبر المستخدمين في الإنتاج.
- الأداء: أقل من 10٪ من تأثير أداء الاستعلام مقارنة بالاستعلامات غير المفلترة.
- الترحيل: تم ترحيل 100٪ من البيانات الحالية بنجاح بدون فقدان.
- سهولة الاستخدام: تعمل جميع أنماط الاستعلام الموجودة مع سياق المستخدم/المجموعة.
- الامتثال: سجل تدقيق شامل لعمليات الوصول إلى بيانات المستخدم/المجموعة.
الخلاصة
يوفر النهج القائم على التصفية المستندة إلى الخصائص أفضل توازن بين الأمان والأداء وقابلية الصيانة لإضافة عزل المستخدم/المجموعة إلى Neo4j. إنه يتماشى مع أنماط متعددة المستأجرين الحالية في TrustGraph مع الاستفادة من نقاط قوة Neo4j في استعلامات الرسم البياني والفهرسة.
تضمن هذه الحل أن يلبي الخلفية Neo4 لـ TrustGraph نفس معايير الأمان مثل الأنظمة الخلفية الأخرى للتخزين، مما يمنع ثغرات أمنية لعزل البيانات مع الحفاظ على المرونة وقوة استعلامات الرسم البياني.