بررسی اصول امنیتی پایگاه های داده بخش یازدهم
امکان تغییر پایگاهداده ای که Login بصورت پیش فرض به آن وصل میشود وجود دارد. اگر به شکل3-7 مراجعه کنید متوجه میشوید که پایگاهداده پیش فرض متناظر با Group 1 ، master میباشد.بهتر است که یک Login فقط به پایگاهداده ای که به آن احتیاج دارد دسترسی داشته باشد. با استفاده از دستور Alter Login میتوان پایگاهداده پیش فرض را تغییر داد.
ALTER LOGIN [YASHAR\Group 1]
WITH DEFAULT_DATABASE=[Pubs]
قدم آخر ، اعطا دسترسی به کاربران ویندوز است تا Loginها بتوانند به پایگاهداده Pubs دسترسی پیدا کنند. برای این کار باید از پایگاهداده master به پایگاهداده Pubs سویچ کنیم. این عمل با استفاده از کلمه کلیدی USE انجام میشود.
دستور CREATE USER کاربری را که قرار است به پایگاهداده دسترسی داشته باشد را ایجاد میکند. کد زیر کاربری با نام Group 1 ایجاد کرده و Login مورد نظر را به آن مینگارد. در روش هویت شناسی توسط ویندوز بهتر است نام Login و گروه( کاربر) یکسان باشد.
USE Pubs
CREATE USER [YASHAR\Group 2]
FOR LOGIN [YASHAR\Group 2]
3-3-2 Loginهای سرویس دهنده و کاربران پایگاهداده
در SQLServer تفویض اختیار یک فرایند چند سطحی است که شامل تفویض اختیار در سطح سرویس دهنده و تفویض اختیار در سطح پایگاهداده میباشد. ایجاد Loginها و یا مدیریت سرویس دهنده مثالهایی از تفویض اختیار در سطح سرویس دهنده میباشند. خواندن دادهها از جداول و یا ایجاد جدولهای جدید نیز مثالهایی از تفویض اختیار در سطح پایگاهداده میباشند. در واقع Login ها برای ایجاد ارتباط با SQLServer و انجام عملیاتی نظیر آنچه در مثال فوق ذکر شد بکار میروند و به دادهها دسترسی ندارند. این Loginها باید به کاربران ، که در سطح پایگاهداده تعریف میشوند نگاشته شوند تا بتوانند از مزایای آنها ( کار با پایگاهداده) ، برخوردار شوند. یک Login میتواند به کاربران مختلف در پایگاهدادههای مختلف نگاشت شود ولی امکان نگاشت یک Login به چند کاربر در سطح پایگاهداده وجود ندارد.
3-3-2-1 ایجاد Login در سطح سرویس دهنده با استفاده از GUI
ابتدا از Object Explorer ، Security/Login را انتخاب میکنیم. سپس بر روی New Login کلیک کنید. شکل3-14 در پیش روی شما خواهد بود. نامی برای Login مورد نظر خود انتخاب کنید(در این شکل SqlLogin1 به عنوان نام انتخاب شده است). بر روی SQL Server authentication کلیک کنید و کلمه رمزی برای Login خود انتخاب کنید.
شکل3-14 : ایجاد یک Login جدید
همانطور که گفته شد اختیارات Loginها در سطح سرویس دهنده میباشد و برای اینکه به پایگاهدادهها دسترسی داشته باشند باید به کاربران پایگاهداده نگاشته شوند. در شکل3-15 کاربری با عنوان dbUser1 ساخته شده و Login مورد نظر ما که همان SqlLogin1 است به آن متصل میشود. این کاربر به پایگاهداده Pubs دسترسی دارد و البته مالک آن نیز به شمار میرود.
شکل3-15 : اعطای دسترسی به پایگاهداده به Login مورد نظر
در مورد Securable و Server Roles در بخشهای آینده بیش تر توضیح داده خواهد شد.
3-3-2-2 ایجاد Login در سطح سرویس دهنده با استفاده از کد T-SQL
برای انجام مراحل فوق از طریق کد T-SQL به صورت زیر عمل میکنیم :
USE [master]
CREATE LOGIN [SqlLogin2] WITH PASSWORD=N'plm789' DEFAULT_DATABASE=[pubs], DEFAULT_LANGUAGE=[us_english]
این کد یک Login با عنوان SqlLogin2 و با کلمه رمز plm789 میسازد. پایگاهداده پیش فرض pubs میباشد. زبان مورد استفاده us_english است.
3-3-3 Sa Login
Sa Login یک Login پیش فرض با اختیارات مدیریتی است. اگر کاربری با استفاده از این Login به SQLServer متصل شود ، بر تمامیجنبههای آن کنترل کامل خواهد داشت. SQLServer صرف نظر از اینکه در چه مد هویت شناسیی نصب شده است این ID را قبول میکند. اگر در ویندوز ، UserName با عنوان sa موجود باشد این کاربر قادر به وصل شدن به SQLServer میباشد ولی اختیاری بیش تر از این ندارد. توجه داشته باشید که Sa Login میتواند در گروههای دیگری غیر از گروه مدیر ویندوز ، تعریف شده باشد و به SQLServer متصل شود. به عبارت دیگر این Login صرف نظر از گروه ویندوزی که به آن متعلق است میتواند به SQLServer متصل شود. لازم به یادآوری است که میتوان از ورود این کاربران به SQLServer جلوگیری کرد.
در هویت شناسی توسط SQLServer ، sa یک UserName معتبر خواهد بود. میتوان حدس زد که کاربری با این UserName چه اختیاراتی دارد. او اختیار برای رویت ، تغییر و یا حذف هر داده ای دارد. در بدترین حالت این کاربر قادر به خراب کردن هر پایگاهداده ای است همانطورکه قادر به از کار انداختن خود SQLServer نیز هست. پس در حالت MM انتخاب کلمه رمز مناسب امری ضروری است به طوری که کسی قادر به حدس زدن آن نباشد و از انتخاب رمزهای آسان برای این UserName پرهیز شود. دلایل دیگری نیز وجود دارد که به ما گوشزد میکند تا در استفاده از sa محتاط باشیم. ممکن است در مقطعی از زمان نیاز داشته باشیم تشخیص دهیم که چه کسی یک Query خاص را بر روی پایگاهداده اجرا کرده است و یا ممکن است کسی دادههای زیادی را وارد پایگاهداده کرده و فضای زیادی از حافظه را مصرف کرده باشد و موجب بزرگتر شدن فایل log شده باشد. در این حالت باید با شخص مورد نظر تماس گرفته شود و او از ادامه این فرایند بازداشته شود. اگر این شخص با sa ، Login شده باشد هویت او قابل تشخیص نیست.
3-4 کنترل دسترسی(Access Control)
مالک منابع با استفاده از عبارات Grant ، Deny و Revoke دسترسی به منابع را کنترل میکند. اختیارات به Loginهای SQLServer ، گروههای ویندوز ، کاربران پایگاهداده ، نقشهای پایگاهدادهای و نقشهای برنامهای بر روی منابعی نظیر Schema ، Type ، Assembly ، Table و ... اعمال میشود. کلمات کلیدی توضیح داده شده است و مثال عملی در این باره در بخشهای بعدی آورده شده است.
Grant : کاربر مجاز به انجام اختیار داده شده بر روی منبع مورد نظر میباشد. به عنوان مثال اگر اختیار Select بر روی جدول Table1 با کلمه کلیدی Grant مشخص شده باشد ، یعنی کاربر قادر به مشاهدۀ دادههای Table1 میباشد.
Deny : کاربر از انجام اختیار منع شده است. مثلا اگر اختیار Insert بر روی Table1 با کلمه کلیدی Deny مشخص شده باشد کاربر مجاز به وارد کردن دادههای جدید در این جدول نمیباشد.
Revoke : Grant و Deny داده شده را لغو میکند.
براي آشكار شدن موضوع به بررسي چند مثال مي پردازيم :
ابتدا پنجرة new query را باز كنيد. فرض كنيد در پايگاه داده mydb كاربري به نام yashar و جدولي به نام mytbl وجود دارد. براي اعطا و يا سلب اختيار از اين كاربر بصورت زير عمل ميكنيم :
USE mydb
اعطاي امتياز select به كاربر yashar در جدول mytbl
GRANT SELECT ON mytbl to yashar
اعطاي امتياز insert به كاربر yashar در جدول mytbl
GRANT INSERT ON mytbl to yashar
سلب امتياز alter از كاربر yashar در جدول mytbl
DENY ALTER ON mytbl to yashar
اگر قبلا با دستور GRANT امتيازي مانند CONTROL به كاربر yashar اعطا شده باشد و يا با استفاده از دستور DENYامتيازي از وي سلب شده باشد ، با استفاده از دستور REVOKE هر يك از دستور هاي پيشين لغو ميشود.
REVOKE CONTROL ON mytbl to yashar