پایگاه داده

پایگاه داده < حوزه فنی و نرم افزار
SQL Injection یک نوع حمله با استفاده از ارسال یک رشته(String) حاوی کد مخرب به SQL Server Instance می باشد. کد مخرب حاوی یک دستور معتبر SQL  است که به طور طبیعی توسط SQL سرور اجرا می شود.
فرم اولیه این نوع حمله شامل درج یک دستور SQL در مقادیری است که توسط برنامه از کاربر دریافت می شود. به طور مثال فرض کنید برنامه نام یک طرف حساب را دریافت و لیست سفارشات خرید مربوط به طرف حساب انتخابی را لیست می کند. کد مربوط به تهیه لیست می تواند شبیه به زیر باشد:
 
SELECT * FROM CustomerOrder WHERE CustomerName=’@pUserInput’
که @pUserInput پارامتر دریافت شده از کاربر است حال اگر کاربر قصد برنامه ریزی یک حمله را داشته باشد می تواند رشته ای با فرمت زیر را به عنوان نام طرف حساب به برنامه ارائه کند:
 
Mohammad’; DELETE FROM CustomerOrder—
دستور SQL که به سرور SQL ارسال می شود به صورت زیر خواهد بود:
 
SELECT * FROM CustomerOrder WHERE CustomerName=’ Mohammad’; DELETE FROM CustomerOrder—
 
ارسال این دستور به SQL سرور حاصلی جز حذف کلیه طرف حسابهای ثبت شده در پایگاه داده نخواهد داشت. توجه داشته باشید که (;) به مفهوم پایان یک دستور و شروع یک دستور دیگر بوده و (--) به مفهوم آنست که مابقی عبارت بعد از برای SQL به منزله کامنت تلقی خواهد شد.
جهت جلوگیری از حملات از نوع SQL Injection باید تمامی اطلاعاتی که توسط برنامه از کاربر دریافت می شود به دقت ارزیابی و محتوای مشکوک و مخاطره آمیز پذیرش نشود. رعایت موارد زیر می تواند به طور قابل قبولی از حملات SQL Injection جلوگیری نماید:
1-      سایز و نوع دیتا دریافتی کنترل و محدودیتهای وابسته به نوع اطلاعات مورد نظر اعمال شود.
2-      محتوای دیتا کنترل و از پذیرش اطلاعات باینری، کاراکترهای کامنت و ... خودداری شود.
3-      هیچگاه به طور مستقیم از دیتای وارد شده توسط کاربر دستور SQL ساخته نشود.
4-      کاراکتر های خاص نظیر (;),(‘),(--),(xp_),(/*  */) در اطلاعات دریافت شده از کاربر پذیرش نشده و یا به نحو مناسب جایگزین شود.
5-      سایز و نوع پارامترهای وروی SP ها کنترل شود.
نکته 1: اطلاعات دریافتی الزام به طور مستقیم از کاربر دریافت نمی شود و می تواند شامل اطلاعاتی باشد که قبلا در جداول پایگاه داده ذخیره شده است.
در SQL Server دو نوع کلی برای تایید اعتبار وجود دارد (Mode Authentication): 
1-Authentication  Windows ( تایید اعتبار بر اساس کاربران سیستم عامل ویندوز ) - در این مدل که مدل پیش فرض نیز می باشد، تنها کاربران سیستم عامل ویندوز قابلیت دسترسی به SQL Server را خواهند داشت. البته این به این معنی نیست که کلیه کاربران ویندوز می توانند به SQL Server دسترسی داشته باشند ولی در این مدل نمیتوان کاربرانی بجز کاربران ویندوز را به SQL Server دسترسی داد. این مدل ایمن ترین مدل تایید اعتبار در SQL Server می باشد. 
2-  Windows Authentication & SQL Server  - در این مدل علاوه بر امکان دسترسی دادن به کاربران ویندوزی، میتوان کاربرانی در SQL Serverبصورت مستقل از ویندوز ایجاد کرد و به آنها امکان دسترسی به SQL Server را داد. امنیت در این روش به مراتب از روش اول کمتر است. 
برای تعیین روش تائید اعتبار در SQL Server کافی است تا در محیط SQL Server Management Studio بروی نام Server ( Node اصلی در درختواره نمایش داده شده ) کلیک سمت راست انجام دهید و گزینه Properties را انتخاب کنید و در بخش Security، Server Authentication مورد نظر را انتخاب کنید.
نکته : در صورتی که مدل تائید اعتبار را تغییر داده اید برای اعمال شدن آن نیاز است تا سرویس SQL Server ریستارت شود.  
 
 
این قابلیت وجود دارد که چندین نسخه از SQL Server بصورت کاملا مستقل بروی یک ماشین نصب شوند. به هر SQL Server نصب شده روی یک ماشین یک Instance (نمونه) از SQL Server گفته می شود. هر یک از Instance ها دارای یک نام مشخص می باشند و به Instance ای که در زمان نصب، نام خاصی به آن اختصاص داده نشده است و هم نام با ماشینی است که بروی آن نصب است، Default Instance گفته می شود. از یکی از مهمترین کاربردهای نصب Instance های مختلف بروی یک سرور می توان نیاز به ویرایش های مختلف از SQL Server را نام برد. فرض کنید در سازمانی نرم افزارهایی بروی Server موجود است که برخی از آنها تنها با SQL Server2005 قادر به کار هستند و برخی دیگر بروی SQL Server2008 در چنین شرایطی نیاز است تا Instance های جداگانه نصب شود. (تفاوت در Version- Edition-Platform)
نکته : توجه داشته باشید هر Instance سرویس های مجزا و خاص خود را دارد و بنابراین هربار نصب Instance جدید بروی یک سرور، دارای هزینه هایی هم خواهد بود و لذا از نصب بی مورد Instance جدید جلوگیری کنید.