شماره :IRCAR201409233
تاريخ: 29/6/93
1- مقدمه
SQL Server ويژگيهاي زيادي دارد كه ايجاد برنامههايي با پايگاه داده امن را پشتيباني ميكند. صرفنظر از نسخه SQL Server، ملاحظات امنيتي معمول مانندسرقت دادهها و جامعيت دادهها در اين نرمافزار در نظر گرفته ميشود. درصورتيكه دادهها محافظت نگردند، ممكن است به علت دستكاري و تغييرات غيرعمدي يا خرابكارانه پاك شوند يا تغيير يابند و ارزش خود را از دست بدهند. بعلاوه، اغلب بايد مسائلي مانند ذخيرهسازي صحيح اطلاعات محرمانه نيز مورد توجه قرار گيرد.
هر نسخه از SQL Server مانند هر نسخه از ويندوز، ويژگيهاي امنيتي متفاوتي نسبت به نسخههاي پيشين خود دارد و نسخههاي جديدتر، عملكرد بهتري نسبت به نسخههاي پيشين دارند.
اين مهم است كه درك كنيم كه ويژگيهاي امنيتي به تنهايي قادر به تضمين يك برنامه پايگاه داده امن نيستند. هر برنامه پايگاه داده از جهت ملزومات، محيط اجرا، مدل اجرا، موقعيت فيزيكي و تعداد كاربران منحصر به فرد است. ممكن است برخي برنامههاي محلي نيازمند امنيت حداقلي باشند، درحاليكه ساير برنامههاي محلي و يا برنامههايي كه بر روي اينترنت به كار گرفته ميشوند ممكن است به معيارهاي امنيتي قويتر و مانيتورينگ و ارزيابي دائم نياز داشته باشند.
ملزومات امنيتي يك برنامه پايگاه داده SQL Server بايد در زمان طراحي در نظر گرفته شود نه پس از آن. ارزيابي تهديدات در ابتداي چرخه توسعه برنامه اين فرصت را در اختيار شما قرار ميدهد كه خسارت بالقوه را در هرجايي كه يك آسيبپذيري شناسايي ميشود، كاهش دهيد.
حتي اگر طراحي اوليه يك برنامه بيعيب و نقص باشد، باز هم تهديدات جديد ممكن است در زمان بهرهبرداري از سيستم رونمايي كنند. با ايجاد خطوط دفاعي مختلف براي پايگاه داده، ميتوانيد خسارت وارد شده توسط يك نشت امنيتي را به حداقل برسانيد. نخستين خط دفاعي، كاهش سطح حمله با اعطاي مجوزهاي حداقلي و رعايت اصل حداقل دسترسي است.
در قسمت قبلي مجموعه مقالات امنيت SQL Server، به نماي كلي امنيت SQL Server، انواع سناريوهاي احراز هويت در SQL Server، تفويض اختيار و مجوزها در SQL Server، رمزگذاري دادهها و امنيت يكپارچه CLR، سناريوهاي امنيت برنامه كاربردي، مديريت مجوزها با استفاده از روالهاي ذخيره شده، نوشتن SQL پوياي امن، امضاي روالهاي ذخيره شده و جعل هويت در SQL Server و تخصيص مجوزهاي سطح ركورد و ايجاد نقشهاي برنامه كاربردي پرداختيم. اين بخش از اين مجموعه مقالات به طور مختصر به فعالسازي دسترسي بين پايگاههاي داده ميپردازد.
2- فعالسازي دسترسي بين پايگاه دادهها در SQL Server
زنجيره مالكيت بين پايگاههاي داده زماني اتفاق ميافتد كه يك روال در يك پايگاه داده به شيئي در يك پايگاه داده ديگر وابسته باشد. يك زنجيره مالكيت بين پايگاههاي داده به همان روشي كار ميكند كه زنجيره مالكيت در يك پايگاه داده منفرد كار ميكند، به جز اينكه يك زنجيره مالكيت كه شكسته نشده باشد نياز دارد كه تمامي مالكان اشياء به حساب لاگين يكساني نگاشت گردند. درصورتيكه شيء منبع در پايگاه داده منبع و شيء مقصد در پايگاه داده مقصد توسط حساب لاگين يكساني مالكيت گردند، SQL Server مجوزهاي شيء مقصد را مورد بررسي قرار نميدهد.
2-1- پيشفرض غيرفعال
زنجيره مالكيت بين پايگاههاي داده به طور پيشفرض غيرفعال است. مايكروسافت توصيه ميكند كه زنجيره مالكيت بين پايگاههاي داده را غيرفعال نماييد، چرا كه شما را در برابر تهديدات امنيتي ذيل آسيبپذير ميسازد:
مالكان پايگاه داده و اعضاي نقشهاي پايگاه داده db_ddladmin يا db_owners ميتوانند اشيايي ايجاد كنند كه توسط ساير كاربران مالكيت ميشود. اين اشياء ميتوانند به طور بالقوه اشياي پايگاههاي داده ديگر را هدف قرار دهند. اين بدان معناست كه درصورتيكه شما زنجيره مالكيت بين پايگاههاي داده را فعال نماييد بايد به اين كاربران در مورد دادههاي تمامي پايگاههاي داده اعتماد داشته باشيد.
كاربراني با مجوز CREATE DATABASE ميتوانند پايگاههاي داده جديدي ايجاد نمايند و آنها را به پايگاههاي داده موجود متصل كنند. درصورتيكه زنجيره مالكيت بين پايگاههاي داده فعال باشد، اين كاربران ميتوانند از پايگاههاي داده جديد به اشياي ساير پايگاههاي داده كه مجوز آنها را در اختيار ندارند، دسترسي پيدا كنند.
2-2- فعالسازي زنجيره مالكيت بين پايگاههاي داده
زنجيره مالكيت بين پايگاههاي داده بايد فقط در محيطهايي فعال گردد كه شما ميتوانيد به طور كامل به كاربران داراي سطح دسترسي بالا اطمينان نماييد. اين مسأله ميتواند در طول تنظيمات و پيكربندي براي تمامي پايگاههاي داده تنظيم گردد يا اينكه به طور انتخابي با استفاده از دستورات sp_configure و ALTER DATABASE درTransact-SQL براي يك پايگاه داده خاص تنظيم شود.
براي تنظيم انتخابي زنجيره مالكيت بين پايگاههاي داده، ابتدا از دستور sp_configure براي غيرفعال كردن آن براي سرور استفاده كنيد. سپس از دستور ALTER DATABASE به همراه SET DB_CHAINING ON براي تنظيم زنجيره مالكيت بين پايگاههاي داده براي پايگاههاي داده مورد نظر خود استفاده كنيد.
مثال زير زنجيره مالكيت بين پايگاههاي داده را براي تمامي پايگاههاي داده فعال ميكند:
EXECUTE sp_configure 'show advanced', 1; RECONFIGURE; EXECUTE sp_configure 'cross db ownership chaining', 1; RECONFIGURE;
مثال زير زنجيره مالكيت بين پايگاههاي داده را براي پايگاههاي داده خاص Database1 و Database2 فعال ميكند:
ALTER DATABASE Database1 SET DB_CHAINING ON; ALTER DATABASE Database2 SET DB_CHAINING ON;
2-3- SQL پويا
زنجيره مالكيت بين پايگاههاي داده در شرايطي كه دستورات SQL در حال اجرا به صورت پويا ايجاد شده باشند، كار نميكند. مگر اينكه همان كاربر در هر دو پايگاه داده وجود داشته باشد. شما ميتوانيد اين كار را در SQL Server با ايجاد يك روال ذخيره شده كه به دادههاي پايگاه داده ديگر دسترسي داشته باشد و امضاي آن روال با گواهينامهاي كه در هر دو پايگاه داده وجود داشته باشد انجام دهيد. اين كار، دسترسي به منابع پايگاه داده مورد استفاده روال را بدون نياز به تخصيص مجوز در اختيار كاربران قرار ميدهد.
- 27