تزويد مستخدمي MySQL بالحد الأدنى من الامتيازات

StackOverflow https://stackoverflow.com/questions/335951

  •  22-07-2019
  •  | 
  •  

سؤال

بالنسبة لتطبيق ويب، عند إنشاء المستخدم الذي سيتصل بقاعدة بيانات MySQL، لديك خيار الامتيازات.بافتراض أن الإجراءات الوحيدة التي يعتزم القيام بها هذا المستخدم هي SELECT/INSERT/UPDATE/DELETE، يبدو من المنطقي توفير هذه الامتيازات فقط، ومع ذلك لم أر ذلك موصى به في أي مكان - ما هي الأسباب المؤيدة والمعارضة لذلك طريقة؟

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

المحلول

وهناك امتيازات أخرى قد يحتاجها المستخدم أثناء التطبيق العادي، على سبيل المثال:

  • إنشاء جدول مؤقت
  • تنفيذ (الإجراءات المخزنة)
  • ملف (لتحديد البيانات وتحميلها)
  • قفل الجداول

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

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

SELECT * FROM mytable, mytable, mytable, mytable, mytable ORDER BY 1;

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

لا أعرف أي شخص يقوم بتعيين مستخدمي تطبيقاته لمستخدمي MySQL متميزين.إنهم مستخدمون قمت بتوثيقهم في تطبيقك، بعد تم توصيل التطبيق بقاعدة البيانات (المستخدمون هم مجرد صفوف من البيانات في قاعدة البيانات).

لذلك ربما يكون من الأفضل أن يستخدم تطبيق الويب الخاص بك مستخدم MySQL واحدًا يتمتع بامتيازات كاملة.

نصائح أخرى

وأنا لا أتفق مع بيل هنا وخط ATOMIX في التفكير هو أكثر ملاءمة. إلا أنه يمكن البرهنة على خلاف ذلك، والإجابة بيل يزيد إلى حد كبير من خطر قاعدة بيانات يتم المساس بها.

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

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

وبعد ذلك، للمخطوطات PHP، لديك واحدة مع الحد الأدنى المطلوب، مثل فقط INSERT، SELECT، UPDATE، ربما ليس حتى حذف، وهذا يتوقف على السيناريو PHP الخاص بك. وهذا سيكون في ملفات PHP، وهذا هو، في الواقع سوى ملف واحد خارج من جذر المستند، كما أوصت به أكثر من غيرها.

والسبب هو على النحو التالي: نعم، أنت لا تحتاج إلى المستخدم الخلية لكل مستخدم تطبيق ويب. لكن مبدأ الامتيازات الأقل ( http://en.wikipedia.org/wiki/Principle_of_least_privilege ) ينبغي تطبيق. إذا على نحو ما هو خطر المستخدم الخاص بك سوبر الخلية لأنك اسمه بطريق الخطأ الخلية الخاصة بك ربط النصي كما. TXT بدلا من فب، أو شخص ما تمكنت من الوصول إلى ملفات سيرفر، على الأقل "أسوأ" ما يستطيعون فعله هو SELECT، UPDATE و INSERT. .. أي حين يمكن أن يسبب مشاكل كبيرة على أي حال، ليس سيئا كما منحهم DROP DATABASE، جداول DROP والأمور أسوأ بكثير.

وبالإضافة إلى ذلك، في مشروعي الحالي بسبب ممارسات التنمية رشيقة (أنا لا أعمل لولكن نوصي HTTP: // شبكة الاتصالات العالمية. agilealliance.org/ )، واحد أو اثنين "غير التكنولوجيا" أعضاء الفريق تستخدم مباشرة بريس لإجراء تغييرات مباشرة إلى قاعدة بيانات MySQL. وذلك لأن خلق CMS لإدخال البيانات مباشرة بسيط غير مطلوب. في هذه الحالة، يمكن للمستخدم الخلية الثالث برصيد معقول لكن مرة أخرى، "ما يكفي" امتيازات مناسبة لهم. نحن لا نريد أن تشل أعضاء الفريق مع امتيازات قليلة جدا، ولكن بالطبع لا ينبغي أن يكون قادرا على حذف بطريق الخطأ أو تغيير الأمور.

ومنذ ماي لم يكن لديك أدوار (اعتبارا من الوقت الذي تم طرح السؤال الأصلي، وحسب بيل) ثم السماح لأي سيناريو على شبكة الإنترنت للوصول فقط الخلية مع واحد فقط سوبر العضو امر بالغ الخطورة.

ووالتطبيق على شبكة الإنترنت عادة ما يستخدم مستخدم واحد فقط للوصول إلى DB، بدلا من أن يكون المستخدم في حساب المستخدم الفعلي. تطبيق الحد الأدنى من امتيازات الممارسات الجيدة. اسم المستخدم وكلمة المرور سوف تكون مشفرة في السيناريو الخاص بك (لا أحد تعتم هذا؟) لذلك ليس هناك مجال للمساومة في حالة عدم تمكن البرامج النصية بشكل صحيح.

في تجربتي، وأنا جدا، نادرا جدا ما يكون التطبيق حذف الصفوف - أفضل بكثير لعلم صف واحد كما حذف كما لديك ثم مراجعة ما هو هناك بدلا من عدم معرفة ما كان هناك! هذا النهج يساعد ايضا على الحفاظ على الجداول والفهارس الأمثل.

لذلك، أود أن أقترح السماح INSERT فقط، UPDATE واختر - أنها سوف تصبح بسرعة واضح إذا تحتاج إلى خففت قليلا أجزاء من التطبيق الخاص بك

!

والسماح يمكن أن المزيد من الامتيازات توسيع فقط إمكانية لهجمات حجب الخدمة عن طريق إصدار الأوامر مكثفة الموارد، أو السماح الهجمات الخبيثة البيانات.

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