IRCAR201401197
تاريخ: 17/10/92
1- مقدمه
SQL Server ويژگيهاي زيادي دارد كه ايجاد برنامههايي با پايگاه داده امن را پشتيباني ميكند. صرفنظر از نسخه SQL Server، ملاحظات امنيتي معمول مانندسرقت دادهها و جامعيت دادهها در اين نرمافزار در نظر گرفته ميشود. درصورتيكه دادهها محافظت نگردند، ممكن است به علت دستكاري و تغييرات غيرعمدي يا خرابكارانه پاك شوند يا تغيير يابند و ارزش خود را از دست بدهند. بعلاوه، اغلب بايد مسائلي مانند ذخيرهسازي صحيح اطلاعات محرمانه نيز مورد توجه قرار گيرد.
هر نسخه از SQL Server مانند هر نسخه از ويندوز، ويژگيهاي امنيتي متفاوتي نسبت به نسخههاي پيشين خود دارد و نسخههاي جديدتر، عملكرد بهتري نسبت به نسخههاي پيشين دارند.
اين مهم است كه درك كنيم كه ويژگيهاي امنيتي به تنهايي قادر به تضمين يك برنامه پايگاه داده امن نيستند. هر برنامه پايگاه داده از جهت ملزومات، محيط اجرا، مدل اجرا، موقعيت فيزيكي و تعداد كاربران منحصر به فرد است. ممكن است برخي برنامههاي محلي نيازمند امنيت حداقلي باشند، درحاليكه ساير برنامههاي محلي و يا برنامههايي كه بر روي اينترنت به كار گرفته ميشوند ممكن است به معيارهاي امنيتي قويتر و مانيتورينگ و ارزيابي دائم نياز داشته باشند.
ملزومات امنيتي يك برنامه پايگاه داده SQL Server بايد در زمان طراحي در نظر گرفته شود نه پس از آن. ارزيابي تهديدات در ابتداي چرخه توسعه برنامه اين فرصت را در اختيار شما قرار ميدهد كه خسارت بالقوه را در هرجايي كه يك آسيبپذيري شناسايي ميشود، كاهش دهيد.
حتي اگر طراحي اوليه يك برنامه بيعيب و نقص باشد، باز هم تهديدات جديد ممكن است در زمان بهرهبرداري از سيستم رونمايي كنند. با ايجاد خطوط دفاعي مختلف براي پايگاه داده، ميتوانيد خسارت وارد شده توسط يك نشت امنيتي را به حداقل برسانيد. نخستين خط دفاعي، كاهش سطح حمله با اعطاي مجوزهاي حداقلي و رعايت اصل حداقل دسترسي است.
اين مقاله به طور مختصر به توصيح ويژگيهاي امنيتي در SQL Server كه مناسب توسعه دهندگان نرمافزار است ميپردازد.
2- نماي كلي امنيت SQL Server
يك استراتژي دفاع در عمق با لايههاي امنيتي همپوشان، بهترين راه براي روبرو شدن با تهديدات امنيتي است. SQL Server يك معماري امنيتي را ارائه ميدهد كه براي اين طراحي شده است كه مديران پايگاه داده و توسعه دهندگان نرمافزار بتوانند برنامههاي پايگاه داده امن ايجاد كرده و با تهديدات مقابله نمايند. هر نسخه از SQL Server با معرفي ويژگيهاي جديد و عملكرد بهتر، نسبت به نسخههاي پيشين آن بهبود يافته است. البته امنيت در يك جعبه به فروش نميرسد. هر برنامه از جهت ملزومات امنيتي آن منحصر به فرد است. توسعه دهندگان نرمافزار بايد بدانند كدام تركيب از ويژگيها و عملكردها بهترين انتخاب براي آنهاست تا با تهديدات شناخته شده مقابله كرده و در برابر تهديدات احتمالي آتي نيز آماده باشند.
SQL Server شامل مجموعهاي سلسلهمراتبي از نهادهاست كه با سرور آغاز ميگردند. هر سرور شامل چندين پايگاه داده بوده و هر پايگاه داده شامل مجموعهاي از اشياي قابل امنسازي است. هر شيء قابل امنسازي SQL Server داراي مجوزهايي است كه ميتوانند به يك فرد يا يك گروه تخصيص يابند. چارچوب كاري (framework) امنيتي SQL Server، دسترسي به نهادهاي قابل امنسازي را از طريق احراز هويت و تفويض اختيار مديريت مينمايد.
- احراز هويت عبارت است از پروسه اتصال و ورود به SQL Server كه در آن، فرد با ثبت اطلاعات اعتباري (نام كاربري و كلمه عبور) خود و ارزيابي اين اطلاعات توسط سرور، ميتواند به سرور دسترسي پيدا كند.
- تفويض اختيار عبارت است از پروسه تصميمگيري در مورد اينكه فرد ميتواند به كدام منابع قابل امنسازي دسترسي داشته باشد و در مورد هريك از اين منابع مجوز انجام چه اعمالي را داراست.
2-1- احراز هويت در SQL Server
SQL Server احراز هويت را در دو مود پشتيباني ميكند: مود احراز هويت ويندوز و مود تركيبي.
- احراز هويت ويندوز مود پيشفرض SQL Server است و اغلب تحت عنوان امنيت يكپارچه شناخته ميشود، چرا كه اين مدل امنيتي SQL Server به شكل تنگاتنگي با ويندوز يكپارچه شده است. حسابهاي كاربري خاص و گروهي ويندوز براي ورود و اتصال به SQL Server مورد اعتماد هستند. كاربران ويندوز كه كه پيش از اين احراز هويت شده باشند، نياز به ارائه مجدد اطلاعات خود ندارند.
- مود تركيبي احراز هويت را از هر دو طريق ويندوز و SQL Server پشتيباني ميكند. در اين مود، نام كاربري و كلمه عبور در داخل SQL Server نگهداري ميشود.
نكته امنيتي
توصيه ميشود تا جايي كه ممكن است از احراز هويت ويندوز استفاده كنيد. احراز هويت ويندوز از مجموعهاي از پيامهاي رمز شده براي احراز هويت كاربران در SQL Server استفاده ميكند. اما زماني كه لاگينهاي SQL Server مورد استفاده قرار ميگيرند، نامهاي لاگين و كلمات عبور SQL Server از طريق شبكه ارسال ميشوند كه از امنيت آنها ميكاهد.
در احراز هويت ويندوز، كاربران قبلاً به ويندوز وارد شدهاند و نياز نيست مجدداً و جداگانه به SQL Server وارد شوند. رشته ارتباطي زير بدون نياز به نام كاربري يا كلمه عبور، احراز هويت ويندوز را مورد استفاده قرار ميدهد:
“Server=MSSQL1;Database=AdventureWorks;Integrated Security=true;
نكته
لاگينها از كاربران پايگاه داده مجزا هستند. شما بايد بهطور جداگانه لاگينها يا گروههاي ويندوز را بر كاربران يا نقشهاي پايگاه داده نگاشت (map) نماييد. سپس بايد مجوزهاي مورد نياز را به كاربران يا نقشها اعطا كنيد تا به اشياي پايگاه داده دسترسي يابند.
2-1-1- سناريوهاي احراز هويت
احراز هويت ويندوز در موارد زير اغلب بهترين انتخاب است:
- يك كنترل كننده دامنه وجود داشته باشد
- برنامه و پايگاه داده بر روي يك كامپيوتر قرار داشته باشند
- شما در حال استفاده از SQL Server Express يا LocalDB باشيد
لاگينهاي SQL Server اغلب در موارد زير مورد استفاده قرار ميگيرند:
- زماني كه يك workgroup داشته باشيد
- كاربران از دامنههاي متفاوت و غير قابل اعتماد متصل شوند
- برنامههاي اينترنتي مانند ASP.NET
نكته
استفاده از احراز هويت ويندوز، لاگينهاي SQL Server را غيرفعال نميسازد. با استفاده از ALTER LOGIN DISABLE Transact-SQL ميتوانيد لاگينهاي با حق دسترسي بالاي SQL Server را غيرفعال نماييد.
2-1-2- انواع لاگين
SQL Server سه نوع لاگين را پشتيباني ميكند:
- يك حساب كاربري محلي ويندوز يا حساب دامنه مورد اعتماد. SQL Server براي احراز هويت حساب كاربري ويندوز، به ويندوز تكيه ميكند.
- گروه ويندوز. اعطاي مجوز دسترسي به يك گروه ويندوز، به تمامي لاگينهاي كاربري ويندوز كه عضوي از آن گروه هستند دسترسي ميدهد.
- لاگين SQL Server. SQL Server نام كاربري و عبارت درهمسازي شده كلمه عبور را در پايگاه داده اصلي ذخيره ميكند و با استفاده از روشهاي احراز هويت داخلي، اطلاعات لاگين را اعتبارسنجي مينمايد.
2-1-3- احراز هويت مود تركيبي
درصورتيكه بايد از احراز مود تركيبي استفاده كنيد، بايد لاگينهاي SQL Server ايجاد كنيد كه در SQL Server ذخيره ميشوند. سپس بايد در زمان اجرا، نام كاربري و كلمه عبور SQL Server را وارد نماييد.
نكته امنيتي
SQL Server به همراه يك لاگين SQL Server به نام sa (system administrator) نصب ميگردد. به اين لاگين يك كلمه عبور بسيار قوي تخصيص دهيد و از اين لاگين در برنامه خود استفاده نكنيد. لاگين sa به نقش سروري ثابت sysadmin نگاشت ميگردد كه داراي اعتبارات مديريتي غيرقابل جبران در تمامي سرور است. درصورتيكه مهاجمي به عنوان مدير سيستم به SQL Server دسترسي پيدا كند، هيچ حدي براي خرابكاري وي وجود نخواهد داشت. تمامي اعضاي گروه BUILTIN\Administrators ويندوز بهطور پيشفرض عضو نقش sysadmin نيز هستند، ولي ميتوانند از اين نقش حذف گردند.
درصورتيكه SQL Server بر روي ويندوز سرور 2003 يا نسخههاي پس از آن اجرا گردد، از مكانيزمهاي سياست كلمه عبور ويندوز براي لاگينهاي SQL Server استفاده ميكند. سياستهاي پيچيدگي كلمه عبور براي اين طراحي شدهاند كه با افزايش تعداد كلمات عبور ممكن، امكان حدس زدن آن را از طريق حملات ديكشنري به صفر نزديك كنند. SQL Server ميتواند سياستهاي پيچيدگي و انقضاي كلمه عبور مورد استفاده در ويندوز سرور 2003 را به كلمات عبور مورد استفاده در داخل SQL Server تعميم دهد.
نكته امنيتي
الصاق رشتههاي ارتباط از ورودي كاربر ميتواند شما را در برابر يك حمله تزريق رشته ارتباط آسيبپذير سازد. از SqlConnectionStringBuilder براي ايجاد رشتههاي معتبر ارتباط در زمان اجرا استفاده كنيد.
- 19