IRCAR201401198
تاريخ: 24/10/92
1- مقدمه
SQL Server ويژگيهاي زيادي دارد كه ايجاد برنامههايي با پايگاه داده امن را پشتيباني ميكند. صرفنظر از نسخه SQL Server، ملاحظات امنيتي معمول مانندسرقت دادهها و جامعيت دادهها در اين نرمافزار در نظر گرفته ميشود. درصورتيكه دادهها محافظت نگردند، ممكن است به علت دستكاري و تغييرات غيرعمدي يا خرابكارانه پاك شوند يا تغيير يابند و ارزش خود را از دست بدهند. بعلاوه، اغلب بايد مسائلي مانند ذخيرهسازي صحيح اطلاعات محرمانه نيز مورد توجه قرار گيرد.
هر نسخه از SQL Server مانند هر نسخه از ويندوز، ويژگيهاي امنيتي متفاوتي نسبت به نسخههاي پيشين خود دارد و نسخههاي جديدتر، عملكرد بهتري نسبت به نسخههاي پيشين دارند.
اين مهم است كه درك كنيم كه ويژگيهاي امنيتي به تنهايي قادر به تضمين يك برنامه پايگاه داده امن نيستند. هر برنامه پايگاه داده از جهت ملزومات، محيط اجرا، مدل اجرا، موقعيت فيزيكي و تعداد كاربران منحصر به فرد است. ممكن است برخي برنامههاي محلي نيازمند امنيت حداقلي باشند، درحاليكه ساير برنامههاي محلي و يا برنامههايي كه بر روي اينترنت به كار گرفته ميشوند ممكن است به معيارهاي امنيتي قويتر و مانيتورينگ و ارزيابي دائم نياز داشته باشند.
ملزومات امنيتي يك برنامه پايگاه داده SQL Server بايد در زمان طراحي در نظر گرفته شود نه پس از آن. ارزيابي تهديدات در ابتداي چرخه توسعه برنامه اين فرصت را در اختيار شما قرار ميدهد كه خسارت بالقوه را در هرجايي كه يك آسيبپذيري شناسايي ميشود، كاهش دهيد.
حتي اگر طراحي اوليه يك برنامه بيعيب و نقص باشد، باز هم تهديدات جديد ممكن است در زمان بهرهبرداري از سيستم رونمايي كنند. با ايجاد خطوط دفاعي مختلف براي پايگاه داده، ميتوانيد خسارت وارد شده توسط يك نشت امنيتي را به حداقل برسانيد. نخستين خط دفاعي، كاهش سطح حمله با اعطاي مجوزهاي حداقلي و رعايت اصل حداقل دسترسي است.
در قسمت قبلي مجموعه مقالات امنيت SQL Server، به نماي كلي امنيت SQL Server و انواع سناريوهاي احراز هويت در SQL Server پرداختيم. اين بخش از اين مجموعه مقالات به طور مختصر به توضيح نقشهاي سرور و پايگاه داده در SQL Server ميپردازد.
2- نقشهاي سرور و پايگاه داده در SQL Server
تمامي نسخههاي SQL Server از امنيت مبتني بر نقش استفاده ميكنند كه به شما اجازه ميدهد مجوزها را به جاي افراد خاص، به يك نقش، يا يك گروه از كاربران اعطا كنيد. نقشهاي ثابت سرور و نقشهاي ثابت پايگاه داده داراي مجموعهاي ثابت از مجوزهاي مخصوص به خود هستند.
2-1- نقشهاي ثابت سرور
نقشهاي ثابت سرور داراي مجموعهاي ثابت از مجوزها بوده و قلمرو آنها كل سرور است. اين نقشها بدين منظور در نظر گرفته شدهاند كه در مديريت SQL Server مورد استفاده قرار گيرند و مجوزهاي تخصيص يافته به آنها نميتواند تغيير كند. لاگينها ميتوانند بدون داشتن يك حساب كاربري در يك پايگاه داده، به نقشهاي ثابت سرور اختصاص داده شوند.
نكته امنيتي
نقش ثابت سرور sysadmin شامل تمامي نقشهاي ديگر نيز ميشود و داراي قلمرو نامحدود است. اين نقش را به هيچ فردي اختصاص ندهيد، مگر اينكه بسيار قابل اعتماد باشند. اعضاي نقش sysadmin داراي حقوق دسترسي غيرقابل بازگشت در تمامي پايگاههاي داده و منابع سرور هستند.
در هنگام تخصيص نقشهاي ثابت سرور به كاربران، بهترين انتخابها را انجام دهيد. براي مثال، نقش bulkadmin به كاربران اجازه ميدهد محتويات هر فايل محلي را به يك جدول اضافه كنند كه ميتواند جامعيت دادهها را در معرض خطر قرار دهد.
2-2- نقشهاي ثابت پايگاه داده
نقشهاي ثابت پايگاه داده داراي مجموعهاي از مجوزهاي از پيش تعريف شده هستند كه براي اين طراحي شدهاند كه شما قادر باشيد به سادگي گروههاي مجوزها را مديريت نماييد. اعضاي نقش db_owner ميتوانند تمامي پيكربنديها و فعاليتهاي نگهداري را بر روي پايگاه داده انجام دهند.
لاگينها براي اينكه بتوانند با اشياي پايگاه داده كار كنند، بايد به حسابهاي كاربري پايگاه داده نگاشت شوند. سپس حسابهاي كاربري پايگاه داده ميتوانند به نقشهاي پايگاه داده اضافه گردند و تمامي مجموعه مجوزهاي مرتبط با آن نقشها را به ارث ببرند. تمامي مجوزها ميتوانند اعطا گردند.
شما همچنين بايد در هنگام طراحي امنيت برنامه خود، نقش عمومي، حساب كاربري dbo و حساب كاربري مهمان را در نظر بگيريد.
2-3- نقش عمومي
نقش عمومي در هر پايگاه دادهاي از جمله پايگاههاي داده سيستمي وجود دارد. اين نقش نميتواند حذف گردد و شما نميتوانيد كاربران مورد نظر خود را به نقش عمومي افزوده يا از آن حذف نماييد. در حقيقت مجوزهاي اعطا شده به نقش عمومي توسط تمامي كاربران و نقشهاي ديگر به ارث برده ميشوند، چرا كه تمامي كاربران و تمامي نقشها بهصورت پيشفرض به نقش عمومي تعلق دارند. بنابراين بايد صرفاً مجوزهايي را به نقش عمومي تخصيص دهيد كه ميخواهيد تمامي كاربران آن مجوزها را در اختيار داشته باشند.
2-4- حساب كاربري dbo
dbo يا صاحب پايگاه داده، يك حساب كاربري است كه مجوزهاي ضمني براي انجام تمامي فعاليتها را در پايگاه داده دارا است. اعضاي نقش سرور ثابت sysadmin بهطور خودكار به dbo نگاشت ميشوند.
نكته
حساب كاربري dbo اغلب با نقش ثابت پايگاه داده db_owner اشتباه گرفته ميشود. اما بايد توجه داشت كه قلمرو db_owner فقط يك پايگاه داده است، درحاليكه قلمرو sysadmin كل سرور است. در نتيجه عضويت در نقش db_owner، حقوق دسترسي كاربر dbo را به همراه نخواهد داشت.
2-5- حساب كاربري مهمان
پس از اينكه يك كاربر احراز هويت گرديد و مجوز لاگين كردن به SQL Server را دريافت كرد، بايد در هر پايگاه دادهاي كه كاربر به آن دسترسي دارد يك حساب كاربري مجزا براي وي وجود داشته باشد. نياز به يك حساب كاربري جداگانه در هر پايگاه داده، از اتصال كاربر به يك نمونه SQL Server موجود بر روي يك سرور و دسترسي به تمامي پايگاههاي داده موجود بر روي آن سرور جلوگيري ميكند. اما وجود يك حساب كاربري مهمان در پايگاه داده، اين مسأله را زير سؤال ميبرد و مجوز لاگين بدون يك حساب كاربري پايگاه داده براي دسترسي به پايگاه داده را صادر مينمايد.
حساب كاربري مهمان يك حساب كاربري دروني در تمامي نسخههاي SQL Server است. اين حساب در پايگاههاي داده جديد بهطور پيشفرض غيرفعال است. درصورتيكه حساب كاربري مهمان فعال باشد، شما ميتوانيد اين حساب را با اجراي دستور Transact-SQL REVOKE CONNECT FROM GUEST و منع درخواست اتصال آن غيرفعال نماييد.
نكته امنيتي
از استفاده از حساب كاربري مهمان خودداري كنيد، چرا كه تمامي لاگينهاي بدون مجوز خاص پايگاه داده، مجوزهاي اعطا شده به اين حساب را دريافت ميكنند. درصورتيكه مجبور هستيد از حساب كاربري مهمان استفاده كنيد، حداقل حقوق دسترسي و حداقل مجوزها را به آن تخصيص دهيد.
- 9