عندما هي آمنة للاستخدام غير معلمات المتغيرات في SQL الأوامر ؟

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

  •  06-09-2019
  •  | 
  •  

سؤال

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

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

المحلول

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

في حين أنه يمكن أن تعتبر آمنة فقط تنسيق الباحث وهو إنشاء SQL التعبير ، هناك أيضا أداء النظر.عند SQL server يرى استعلام لأول مرة, فإنه سيتم إنشاء ذاكرة التخزين المؤقت تنفيذ خطة لهذا الاستعلام.في المرة القادمة نفس الاستعلام الصادرة تنفيذ خطة إعادة استخدامها.

إذا كنت تمر في سلاسل مختلفة ، وسوف ينظر إليها على أنها منفصلة الاستفسارات التي تتطلب منفصلة تنفيذ الخطط.إذا كنت تمر في نفس معلمات الاستعلام في كل مرة (مع اختلاف المعلمات) ، أول خطة التنفيذ سيتم إعادة المستخدمة من قبل SQL Server.

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

نصائح أخرى

أنت تجيب على سؤالك الخاص هنا. System.int32 لا يمكن أن يحتوي على

';DROP DATABASE xxx;--

إذا كان هذا ما تشعر بالقلق. حتى حتى تمر عددا صحيحا لن يؤثر سلبا على قاعدة البيانات الخاصة بك!

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