IRCAR201405215
تاريخ: 22/2/93
1- مقدمه
SQL Server ويژگيهاي زيادي دارد كه ايجاد برنامههايي با پايگاه داده امن را پشتيباني ميكند. صرفنظر از نسخه SQL Server، ملاحظات امنيتي معمول مانندسرقت دادهها و جامعيت دادهها در اين نرمافزار در نظر گرفته ميشود. درصورتيكه دادهها محافظت نگردند، ممكن است به علت دستكاري و تغييرات غيرعمدي يا خرابكارانه پاك شوند يا تغيير يابند و ارزش خود را از دست بدهند. بعلاوه، اغلب بايد مسائلي مانند ذخيرهسازي صحيح اطلاعات محرمانه نيز مورد توجه قرار گيرد.
هر نسخه از SQL Server مانند هر نسخه از ويندوز، ويژگيهاي امنيتي متفاوتي نسبت به نسخههاي پيشين خود دارد و نسخههاي جديدتر، عملكرد بهتري نسبت به نسخههاي پيشين دارند.
اين مهم است كه درك كنيم كه ويژگيهاي امنيتي به تنهايي قادر به تضمين يك برنامه پايگاه داده امن نيستند. هر برنامه پايگاه داده از جهت ملزومات، محيط اجرا، مدل اجرا، موقعيت فيزيكي و تعداد كاربران منحصر به فرد است. ممكن است برخي برنامههاي محلي نيازمند امنيت حداقلي باشند، درحاليكه ساير برنامههاي محلي و يا برنامههايي كه بر روي اينترنت به كار گرفته ميشوند ممكن است به معيارهاي امنيتي قويتر و مانيتورينگ و ارزيابي دائم نياز داشته باشند.
ملزومات امنيتي يك برنامه پايگاه داده SQL Server بايد در زمان طراحي در نظر گرفته شود نه پس از آن. ارزيابي تهديدات در ابتداي چرخه توسعه برنامه اين فرصت را در اختيار شما قرار ميدهد كه خسارت بالقوه را در هرجايي كه يك آسيبپذيري شناسايي ميشود، كاهش دهيد.
حتي اگر طراحي اوليه يك برنامه بيعيب و نقص باشد، باز هم تهديدات جديد ممكن است در زمان بهرهبرداري از سيستم رونمايي كنند. با ايجاد خطوط دفاعي مختلف براي پايگاه داده، ميتوانيد خسارت وارد شده توسط يك نشت امنيتي را به حداقل برسانيد. نخستين خط دفاعي، كاهش سطح حمله با اعطاي مجوزهاي حداقلي و رعايت اصل حداقل دسترسي است.
در قسمت قبلي مجموعه مقالات امنيت SQL Server، به نماي كلي امنيت SQL Server و انواع سناريوهاي احراز هويت در SQL Server پرداختيم. اين بخش از اين مجموعه مقالات به طور مختصر به توضيح تفويض اختيار و مجوزها در SQL Server ميپردازد.
2- تفويض اختيار و مجوزها در SQL Server
هنگامي كه شما اشياي پايگاه داده را ايجاد مي كنيد، بايد به طور صريح مجوزها را اعطا نماييد تا آنها را براي كاربران قابل دسترسي سازيد. هر شيء قابل امن سازي مجوزهايي دارد كه مي تواند با استفاده از دستورات مجوز، به يك كاربر اختصاص يابد.
2-1- اصل حداقل دسترسي
روش توسعه يك برنامه با استفاده از يك حساب كاربري با حداقل مجوز (LUA)، بخشي مهم از يك استراتژي دقاع در عمق براي مقابله با تهديدات امنيتي است. روش LUA اين اطمينان را ايجاد مي كند كه كابران از اصل حداقل دسترسي پيروي مي كنند و هميشه با حساب هاي كاربري محدود وارد مي شوند. وظايف مديريتي با استفاده از نقش هاي ثابت سرور انجام مي شوند، و استفاده از نقش ثابت سروري sysadmin به طور جدي محدود است.
همواره از اصل حداقل دسترسي در هنگام اعطاي مجوزها به كاربران پايگاه داده پيروي كنيد. حداقل مجوزهاي لازم براي انجام وظايف را به يك كاربر يا نقش اعطا نماييد.
2-2- مجوزهاي مبتني بر نقش
تخصيص مجوزها به نقشها به جاي كاربران، مديريت امنيت را سادهتر ميسازد. مجموعه مجوزهايي كه به يك نقش تخصيص مييابند، توسط تمامي اعضاي آن نقش به ارث برده ميشوند. افزودن يا حذف كابران از يك نقش، سادهتر از ايجاد مجموعه مجوزهاي مجزا براي تك تك كاربران است. نقشها ميتوانند بهصورت تودرتو تخصيص يابند، اما زياد بودن تعداد اين سطوح ميتواند بازدهي را كاهش دهد. شما همچنين ميتوانيد كاربران را به نقشهاي ثابت پايگاه داده اضافه كنيد تا تخصيص مجوزها را سادهتر نماييد.
شما ميتوانيد مجوزها را در سطح schema تخصيص دهيد. كاربران به طور خودكار مجوزها را براي تمامي اشياي جديد ايجاد شده در آن schema دريافت ميكنند و نيازي به تخصيص مجوزها براي اشيايي كه جديداً ايجاد شدهاند نخواهيد داشت.
2-3- مجوزها در كد procedural
محفوظ ساختن دسترسي دادهها از طريق ماژولهايي مانند روالهاي ذخيره شده و توابع تعريف شده توسط كاربر، يك لايه محافظتي اضافه براي برنامه شما ايجاد ميكند. شما ميتوانيد با تخصيص مجوزها فقط به روالهاي ذخيره شده و توابع و رد كردن مجوز به اشيايي مانند جداول، از تعامل مستقيم كاربران با اشياي پايگاه داده جلوگيري كنيد. SQL Server اين كار را با استفاده از زنجيره مالكيت انجام ميدهد.
2-4- دستورات مجوز
سه دستور مجوز Transact-SQL در زير شرح داده شدهاند:
دستور GRANT ميتواند مجوزها را به گروه يا نقشي تخصيص دهد كه ميتواند توسط كاربران پايگاه داده به ارث برده شود. به هر حال دستور DENY بر تمامي دستورات مجوز ديگر اولويت دارد. در نتيجه كاربري كه مجوز وي توسط DENY لغو شده است، نميتواند آن را از نقش ديگر به ارث ببرد.
توجه:
اعضاي نقش سروري ثابت sysadmin و مالكان اشياء را نميتوان توسط دستور DENY لغو مجوز كرد.
2-5- زنجيره هاي مالكيت
SQL Server اين اطمينان را ايجاد ميكند كه فقط كساني كه داراي مجوز هستند به اشياء دسترسي داشته باشند. زماني كه چندين شيء پايگاه داده به يكديگر دسترسي پيدا ميكنند، اين توالي تحت عنوان زنجيره شناخته ميشود. زماني كه SQL Server لينكهاي اين زنجيره را ميپيمايد، مجوزها را به گونهاي متفاوت با زماني كه به هر آيتم به صورت مجزا دسترسي پيدا ميكند، ارزيابي مينمايد. زماني كه يك شيء از طريق يك زنجيره مورد دسترسي قرار ميگيرد، SQL Server ابتدا مالك شيء را با مالك شيء فراخواننده (لينك قبلي زنجيره) مقايسه ميكند. درصورتي كه هر دو شيء مالك يكسان داشته باشند، مجوزهاي شيء دوم بررسي نميگردند. اما در صورتي كه يك شيء به فراخواني شيء ديگري بپردازد كه مالكان يكساني نداشته باشند، زنجيره مالكيت شكسته ميشود و SQL Server بايد وضعيت امنيتي فراخواننده را بررسي نمايد.
2-6- كد procedural و زنجيره مالكيت
تصور كنيد كه يك كاربر مجوزهاي اجرا را بر روي يك روال ذخيره شده كه داده ها را از يك جدول انتخاب ميكند، دريافت كرده باشد. درصورتي كه روال ذخيره شده و جدول داراي مالك يكسان باشند، كاربر نيازي به دريافت مجوز بر روي جدول نخواهد داشت و حتي مجوزهاي وي ميتوانند ابطال گردند. اما درصورتي كه روال ذخيره شده و جدول مالكان متفاوتي داشته باشند، SQL Server بايد پيش از دسترسي به دادهها، مجوزهاي كاربر را بر روي جدول بررسي نمايد.
- 12