سؤال

يتطلب النظام الذي أعمل عليه حاليًا بعض الأمان المستند إلى الأدوار، والذي يتم توفيره جيدًا في حزمة Java EE.يهدف النظام إلى أن يكون إطارًا لخبراء مجال الأعمال لكتابة التعليمات البرمجية الخاصة بهم فوقه.

ومع ذلك، هناك أيضًا متطلبات للبيانات security.أي ما هي المعلومات المرئية للمستخدم النهائي.

وهذا يعني بشكل فعال تقليل رؤية الصفوف (وربما حتى الأعمدة) في قاعدة البيانات.

نحن نستخدم السبات لإصرارنا.ومع ذلك، فإننا نستخدم التعليقات التوضيحية الخاصة بنا حتى لا نكشف خيارنا المستمر لخبراء مجال الأعمال.

بالنسبة للأمان القائم على الصف، فهذا يعني أنه يمكننا إضافة تعليق توضيحي مثل @Secured على مستوى الكيان، مما قد يتسبب في إضافة عمود إضافي إلى الجدول الأساسي لتقييد اختياراتنا؟

بالنسبة للأمن القائم على الأعمدة، ربما كان من الممكن أن نفعل ذلك @Secured إما للمساعدة في إنشاء الاستعلام، أو ربما استخدام جانب لتصفية المعلومات التي يتم إرجاعها؟

أشعر بالفضول لمعرفة كيف قد يؤثر ذلك على آليات التخزين المؤقت للإسبات أيضًا؟

أنا متأكد من أن الكثير من الآخرين قد واجهوا نفس المشكلة، وكنت أتساءل كيف تعاملت مع هذا؟

مقدر جدا...

هل كانت مفيدة؟

المحلول

السبات لديه آلية التصفية قد يكون ذلك مناسبًا لك.ستعيد عوامل التصفية كتابة الاستعلامات التي ينشئها السبات لتضمين عبارة إضافية للحد من الصفوف التي يتم إرجاعها.لست على علم بأي شيء في وضع السبات لإخفاء/إخفاء الأعمدة.

قد تحتوي قاعدة بياناتك أيضًا على دعم لهذه الوظيفة.أوراكل، على سبيل المثال، لديها قاعدة البيانات الخاصة الافتراضية (VPD) والذي سيعيد كتابة استفساراتك على مستوى قاعدة البيانات.يتمتع هذا الحل بميزة إضافية يتمتع بها أي برنامج خارجي (على سبيل المثال.أدوات إعداد التقارير) التي تتعارض مع قاعدة بياناتك، سيتم فرض قيود الأمان الخاصة بك.يتمتع VPD أيضًا بدعم لإخفاء الأعمدة المقيدة بالقيم الخالية.

لسوء الحظ، لم تكن الحلول المذكورة أعلاه كافية لدعم متطلبات الأمان لأنواع المشاريع التي أعمل عليها عادةً.عادة ما يكون هناك نوع من السياق الذي لا يمكن التعبير عنه بسهولة في الحلول المذكورة أعلاه.على سبيل المثال، يمكن للمستخدمين عرض البيانات التي قاموا بإنشائها، أو التي تم وضع علامة عليها كعامة، أو تنتمي إلى مشروع يديرونه.

نقوم عادةً بإنشاء كائنات استعلام/مكتشف/DAO حيث نمرر القيم المطلوبة لفرض الأمان ثم نقوم بإنشاء الاستعلام وفقًا لذلك.

آمل أن يساعد هذا

نصائح أخرى

عند استخدام مرشحات السبات، عليك أن تدرك أنه لن يتم تطبيق القيود الإضافية على عبارات SQL التي تم إنشاؤها بواسطة load() أو get() طُرق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top