IRCAR201402201
تاريخ: 28/11/92
1- مقدمه
SQL Server ويژگيهاي زيادي دارد كه ايجاد برنامههايي با پايگاه داده امن را پشتيباني ميكند. صرفنظر از نسخه SQL Server، ملاحظات امنيتي معمول مانندسرقت دادهها و جامعيت دادهها در اين نرمافزار در نظر گرفته ميشود. درصورتيكه دادهها محافظت نگردند، ممكن است به علت دستكاري و تغييرات غيرعمدي يا خرابكارانه پاك شوند يا تغيير يابند و ارزش خود را از دست بدهند. بعلاوه، اغلب بايد مسائلي مانند ذخيرهسازي صحيح اطلاعات محرمانه نيز مورد توجه قرار گيرد.
هر نسخه از SQL Server مانند هر نسخه از ويندوز، ويژگيهاي امنيتي متفاوتي نسبت به نسخههاي پيشين خود دارد و نسخههاي جديدتر، عملكرد بهتري نسبت به نسخههاي پيشين دارند.
اين مهم است كه درك كنيم كه ويژگيهاي امنيتي به تنهايي قادر به تضمين يك برنامه پايگاه داده امن نيستند. هر برنامه پايگاه داده از جهت ملزومات، محيط اجرا، مدل اجرا، موقعيت فيزيكي و تعداد كاربران منحصر به فرد است. ممكن است برخي برنامههاي محلي نيازمند امنيت حداقلي باشند، درحاليكه ساير برنامههاي محلي و يا برنامههايي كه بر روي اينترنت به كار گرفته ميشوند ممكن است به معيارهاي امنيتي قويتر و مانيتورينگ و ارزيابي دائم نياز داشته باشند.
ملزومات امنيتي يك برنامه پايگاه داده SQL Server بايد در زمان طراحي در نظر گرفته شود نه پس از آن. ارزيابي تهديدات در ابتداي چرخه توسعه برنامه اين فرصت را در اختيار شما قرار ميدهد كه خسارت بالقوه را در هرجايي كه يك آسيبپذيري شناسايي ميشود، كاهش دهيد.
حتي اگر طراحي اوليه يك برنامه بيعيب و نقص باشد، باز هم تهديدات جديد ممكن است در زمان بهرهبرداري از سيستم رونمايي كنند. با ايجاد خطوط دفاعي مختلف براي پايگاه داده، ميتوانيد خسارت وارد شده توسط يك نشت امنيتي را به حداقل برسانيد. نخستين خط دفاعي، كاهش سطح حمله با اعطاي مجوزهاي حداقلي و رعايت اصل حداقل دسترسي است.
در قسمتهاي پيشين مجموعه مقالات امنيت SQL Server، به نماي كلي امنيت SQL Server و انواع سناريوهاي احراز هويت در SQL Server پرداختيم. اين بخش از اين مجموعه مقالات به طور مختصر به توضيح مالكيت و جداسازي schema ها در SQL Server ميپردازد.
2- مالكيت و جداسازي User-Schema در SQL Server
Schemaدر سيستم پايگاه دادهها، ساختاري است كه توسط زبان رسمي DBMSپشتيباني ميشود. در بانك اطلاعاتي رابطهاي، Schema مشخص كننده جداول، فيلدها، روابط، نماها(Views)، انديكسها، فانكشنها ، رويهها و ديگر عناصر هستند. در حقيقت Schemaمانند ظرفي است كه براي نگهداري اشياي پايگاه داده از آن استفاده ميشود. يكي از مفاهيم هستهاي امنيت در SQL Server اين است كه مالكان اشياء، مجوزهاي غير قابل بازپسگيري براي مديريت اشياء داشته باشند. شما نميتوانيد حقوق دسترسي را از مالك يك شيء بگيريد و درصورتيكه كاربران مالك اشيايي در يك پايگاه داده باشند، نميتوانيد آنها را از پايگاه داده حذف نماييد.
2-1- جداسازي User-Schema
جداسازي User-Schema انعطافپذيري بيشتري در مديريت مجوزهاي اشياي پايگاه داده ايجاد ميكند. يك Schema عبارت است از يك كانتينر نامگذاري شده براي اشياي پايگاه داده كه به شما اجازه ميدهد اشيا را در namespace هاي مجزا گروهبندي كنيد. براي مثال، پايگاه داده نمونه AdventureWorks شامل schema هايي براي توليدات، فروش و منابع انساني است.
دستور نامگذاري چهار بخشي براي اشياء، نام schema را مشخص ميكند.
Server.Database.DatabaseSchema.DatabaseObject
2-2- مالكان و مجوزهاي schema
هريك از كابران و نقشهاي پايگاه داده ميتوانند مالك Schema ها باشند و در عين حال يك كاربر ميتواند در آن واحد مالك چندين schema باشد. شما ميتوانيد قوانين امنيتي (security rules) مد نظر خود را بر روي يك schema اعمال نماييد كه اين قوانين توسط تمامي اشياي آن schema به ارث برده ميشوند. همچنين درصورتيكه شما مجوزهاي دسترسي را براي يك schema تنظيم كنيد، اين مجوزها در هنگام اضافه شدن يك شيء جديد به schema، بهطور خودكار بر روي آن شيء نيز اعمال ميگردند. كاربران ميتوانند يك schema ي پيشفرض تخصيص يافته داشته باشند و چندين كاربر پايگاه داده ميتوانند يك schema را به اشتراك بگذارند.
هنگاميكه توسعهدهندگان اشيايي را در يك schema ايجاد ميكنند، بهطور پيشفرض مالك هر شيء همان مالك schema است و نه توسعه دهنده شيء. البته مالكيت يك شيء ميتواند توسط دستور ALTER AUTHORIZATION Transact-SQL از فردي به فرد ديگر انتقال يابد. همچنين يك schema ميتواند اشيايي را در بر بگيرد كه مالكان آنها كاربران مختلف هستند و مجوزهاي جزئيتري نسبت به مجوزهاي schema دارند. البته اين مورد چندان توصيه نميشود، چرا كه انجام اين كار مديريت مجوزهاي اشياء و schema ها را پيچيدهتر ميكند. اشياء ميتوانند بين schema ها حركت كنند و مالكيت schema نيز ميتواند بين كاربران و نقشهاي پايگاه داده جابهجا شود. و در نهايت اينكه كاربران پايگاه داده ميتوانند بدون تأثير بر schema ها حذف گردند.
2-3- schema هاي از پيش تعريف شده
SQL Server به همراه ده schema ي از پيش تعريف شده به فروش ميرسد كه نامهاي يكساني با كاربران و نقشهاي پيشساخته پايگاه داده دارند. شما ميتوانيد schema هايي كه نامهاي يكساني با نقشهاي ثابت پايگاه داده دارند را درصورت عدم نياز به آنها حذف نماييد. اما نميتوانيد schema هاي زير را حذف كنيد:
- Dbo
- Guest
- Sys
- INFORMATION_SCHEMA
در صورتيكه اين schema ها را از پايگاه داده مدل حذف كنيد، در پايگاههاي داده جديد ظاهر نخواهند شد.
نكته
Schema هاي sys و INFORMATION_SCHEMA براي اشياي سيستمي رزرو شدهاند. شما نميتوانيد اشياء را در اين schema ها ايجاد كرده و يا حذف نماييد.
2-4- schema ي dbo
Schema ي dbo همان schema ي پيشفرض براي پايگاه دادهاي است كه جديداً ايجاد شده است. schema ي dbo توسط حساب كاربري dbo مالكيت ميگردد. به طور پيش فرض كاربراني كه توسط دستور CREATE USER Transact-SQL ايجاد ميشوند، dbo را بهعنوان schema ي پيشفرض خود دارند.
البته بايد به خاطر داشت كه كاربراني كه به schema ي dbo تخصيص يافتهاند، مجوزهاي حساب كاربري dbo را به ارث نميبرند. در حقيقت هيچ مجوزي توسط كاربران از schema يي كه بدان تخصيص يافتهاند به ارث برده نميشود، بلكه مجوزهاي schema صرفاً توسط اشياي پايگاه داده اي كه در schema قرار دارند به ارث برده ميشوند.
نكته
هنگامي كه اشياي پايگاه داده با استفاده از يك نام تك بخشي مورد ارجاع قرار ميگيزند، SQL Server ابتدا به schema ي پيش فرض كاربر نگاه ميكند. درصورتيكه اين شيء در آنجا پيدا نشود، آنگاه SQL Server به schema ي dbo نگاه ميكند. اما اگر اين شيء در schema ي dbo نيز پيدا نگردد، يك خطا بازگردانده ميشود.
- 8