جداسازي كاربر- طرح‌واره

مهم‌ترين تغيير مربوط به امنيت در SQL Server 2005، جداسازي كاربر- طرح‌واره است. يك كاربر يا شايد به‌طور دقيق‌تر، يك اصل، هر موجوديتي است كه اشيا پايگاه داده در مقابل آن ايمن مي‌شوند. يك اصل مي‌تواند يك كاربر Windows، يك كاربر SQL Server، يك نقش برنامه يا يك نقش باشد. در SQL Server 2000، مستقيماً تحت مالكيت اشياي پايگاه داده كاربران قرار مي‌گيرد و خود كاربران در جدول سيستمي Sys_Users بودند. همگي اين موارد در SQL Server 2000 تغيير كرده‌اند. حال اشياي پايگاه داده تحت مالكيت طرح‌واره‌ها هستند. كاربران ديگر مستقيماً مالك اشياي پايگاه داده نيستند؛ در عوض آن‌ها مالك طرح‌واره‌ها هستند. در SQL Server 2000، كاربران و ساير اصول امنيتي را مي‌توانيد در ديدگاه sys.database_principals جديد بيابيد. ليست طرح‌واره‌هاي SQL Server 2000 را مي‌توانيد در ديدگاه sys.schemas جديد بيابيد.

يك طرح‌وارهكانتينر اشيا است. طرح‌واره توسط بخش سوم از ساختار دستوري نام‌گذاري شئ چهار بخشي مورد استفاده SQL Server تعيين مي‌شود. مثال بعد ساختار دستوري نام‌گذاري SQL Server 2005 را تشريح مي‌كند كه هر بخش از نام، به‌طور افزايشي خاص‌تر مي‌شود.

Server_name.Database_name.Schema_name.Object_name

در تمام نسخه‌هاي قبلي SQL Server، نام طرح‌واره و نام مالك لزوماً يكسان بود. در SQL Server 2005، مالك مجزا از طرح‌واره است. هنگامي كه SQL Server 2000 و نسخه‌هاي قبلي نام اشيا را تفكيك مي‌كردند، SQL Server 2005 ابتدا Database_name.User_name.Object_name را جستجو مي‌كرد و در صورت عدم موفقيت، آن‌گاه Database_name.dbo.Object_name را جستجو مي‌كند.

دليل اصلي براي اين جداسازي كاربر و طرح‌واره در SQL Server 2005، سامان بخشيدن به مشكل نياز به تغيير مالكيت چند شئ پايگاه داده است، چنان‌چه كاربر معيني سازمان را ترك كرده باشد. علاوه بر اين، عمل تغيير مالك يك شئ پايگاه داده موجب تغيير نام مي‌شود. مثلاً، اگر مالك Table1 در پايگاه داده MyDB از UserA به UserB تغيير كند، آن‌گاه نام معين Table1 از MyDB.UserA.Table1 به MyDB.UserB.Table1 تغيير خواهد كرد. براي كمك به جلوگيري از اين مشكل، بعضي از سازمان‌ها، استاندارد مالكيت تمام اشياي پايگاه داده توسط dbo را مي‌پذيرند، ولي چيزي در سرور وجود ندارد كه اين مسأله را اجباري كند.

در SQL Server 2005، اشياي پايگاه داده در طرح‌واره‌ها قرار دارند و طرح‌واره به نوبت تحت مالكيت كاربران هستند. اين سطح انتزاع جديد، مسأله تغيير مالكيت شئ پايگاه داده را قابل مديريت‌تر مي‌سازد. حذف كاربري كه مالك اشياي پايگاه داده در SQL Server 2005 است، بدين معني است كه DBA هم اينك تنها بايد مالك طرح‌واره را تغيير دهد و نه تمام تك تك اشياي پايگاه داده را. اين امر تعداد اشيايي را كه DBA بايد براي مالك اشيا در يك پايگاه داده با آن‌ها تماس داشته باشد، به شدت كاهش مي‌دهد. براي تغيير مالك تمام اشيا در پايگاه داده SQL Server 2005، تنها مالك طرح‌واره را تغيير داده و آن‌گاه مي‌توانيد كاربر قديمي را حذف كنيد. تغيير مالك شئ پايگاه داده، نام شئ را تغيير نمي‌دهد، زيرا نام طرح‌واره تغيير نكرده است و تنها مالك آن تغيير كرده است.

همان‌گونه كه ممكن است انتظار داشته باشيد، شئ طرح‌واره جديد، روشي را كه SQL Server تفكيك نام شئ پايگاه داده را انجام مي‌دهد، تغيير مي‌دهد. حال هر كاربر داراي يك طرح‌واره پيش‌فرض مرتبط است و SQL Server 2005 ابتدا نام يك شئ نامعين را با استفاده از طرح‌واره پيش‌فرض كاربر جستجو خواهد كرد. اگر اين امر ناموفق بود، SQL Server شئ را با استفاده از نام طرح‌واره dbo جستجو خواهد كرد. مثلاً، اگر UserA داراي يك طرح‌واره پيش‌فرض MySchema1 باشد و آن كاربر پرس‌وجويي را براي جستجوي Table1 انجام دهد، آن‌گاه سرور در ابتدا تلاش خواهد كرد تا نام را با استفاده از MySchema1.Table1 تفكيك كند و آن‌گاه به dbo.Table1 برگردد.

تنها به دليل اين كه پايگاه‌هاي داده SQL Server 2000 مي‌توانستند حاوي چند كاربر و نقش باشند، پايگاه‌هاي داده SQL Server 2005 مي‌توانند حاوي چند طرح‌واره باشند. هر طرح‌واره داراي يك مالك اصلي است كه معمولاً يك كاربر يا نقش مي‌باشد. براي اهداف تفكيك نام، هر كاربر داراي يك طرح‌واره پيش‌فرض است. آن‌گاه اشياي واقعي پايگاه داده در يك طرح‌واره قرار مي‌گيرند. براي ايجاد اشياي پايگاه داده جديد در يك طرح‌واره، بايد مجوز CREATE را براي خود شئ پايگاه داده و مجوز ALTER يا CONTROL را براي طرح‌واره داشته باشيد. زنجيره مالكيت باز هم بر طبق مالكان اصلي است و نه طرح‌واره‌ها.