بسترهای عضویت و نقش ها طوری طراحی شده اند که بتواند محل نگهداری کاربران و نقش ها را بین تعدادی برنامه به اشتراک گذارد. یک برنامه ASP.NET که از بسترهای عضویت و نقش ها استفاده می کند، باید مشخص کند که از کدام محل به اشتراک گذاشته شده می خواهد استفاده کند. به طور خلاصه، چندین برنامه کاربردی وب می توانند از محل نگهداری کاربران و نقش های مشابه استفاده کنند. شکل زیر نشان می دهد که محل نگهداری کاربران و نقش ها برای سه سایت جداسازی شده است: HRSite, CustomerSite, SalesSite.
این سه برنامه کاربردی وب هر کدام کاربران و نقش های خاص خود را دارند، اما محل نگهداری فیزیکی حساب های کاربری و اطلاعات نقش ها در جداول یک بانک اطلاعاتی است.
جدول aspnet_Applications مشخص می کند که هر قسمتی مربوط به کدام برنامه است. هر برنامه که از این بانک اطلاعاتی برای نگهداری اطلاعات حساب های کاربری استفاده می کند، در این جدول با یک سطر مشخص شده است. جدول aspnet_Applications دارای چهار فیلد است: ApplicationId, ApplicationName, LoweredApplicationName و Description. ApplicationId از نوع uniqueidentifier میباشد و کلید اصلی جدول است؛ ApplicationName، نام یکتایی که برای انسان قابل فهم باشد را برای هر برنامه ایجاد می کند. جداول دیگر عضویت و نقش ها با فیلد ApplicationId در جدول aspnet_Applications در ارتباط هستند. برای مثال؛ جدول aspnet_Users که برای هر حساب کاربری یک سطر دارد، یک فیلد ApplicationId به عنوان کلید خارجی دارد؛ به همین صورت جدول aspnet_Roles. فیلد ApplicationId در این جداول مشخص می کند که کدام قسمت محل نگهداری کاربران و نقش ها به کدام برنامه تعلق دارد.
وقتی در یک نرم افزار ASP.NET با بسترهای عضویت و نقشها کار میکنید، انجام جزییات توسط تهیه کننده کپسوله شده است. در بحث های آینده ما از طریق کلاس های Membership و Roles در بستر .NET با بسترهای عضویت و نقش ها ارتباط برقرار می کنیم. وقتی که ما از رابط سطح بالا استفاده میکنیم، نیازی نیست که نگران جزییات سطح پایین باشیم، مانند اینکه توسط SqlMembershipProvider و یا SqlRoleProvider چه پرس و جوهایی اجرا می شوند و یا چه جدول هایی تغییر می کنند. بر این اساس، ما می توانیم با اطمینان از بسترهای عضویت و نقش ها بدون کاوش کردن در شمای بانک اطلاعاتی که در گام دوم ایجاد کردیم، استفاده کنیم. وقتی جدول ها را برای ذخیره دادههای برنامه ایجاد میکنیم، ممکن است نیاز داشته باشیم که موجودیت هایی را برای گزارش به کاربران و یا نقش ها ایجاد کنیم. این کار کمک میکند که با SqlMembershipProvider و SqlRoleProvider آشنایی داشته باشیم برای وقتی که می خواهیم کلید خارجی بین جدول های داده برنامه و جدول هایی که در گام دوم ایجاد کردیم، برقرار کنیم. افزون بر آن، در مواقعی نادر ممکن است نیاز داشته باشیم با محل نگهداری نقش ها و کاربرها به طور مستقیم در سطح بانک اطلاعاتی ارتباط برقرار کنیم (به جای استفاده از کلاس های Membership و Roles).
SqlMembershipProvider باید جدولها، نماها و رویههای ذخیره شده خاص خود را در محل ذخیره کاربران ایجاد کند. بدین منظور میتوان از ابزار aspnet_regsql.exe در مسیر %WINDIR%\Microsoft.Net\Framwork\v2.0.50727 استفاده کرد.
هنگام استفاده، ابزار aspnet_regsql.exe از ما میخواهد که نام سروری که پایگاه داده در آن قرار دارد، مشخصات اعتبارنامه امنیتی برای اتصال به پایگاه داده و نام پایگاه داده را مشخص کنیم.
برای افزودن SqlMembershipProvider از مسیر گفته شده ابزار مورد نظر را اجرا کنید. یک ویزارد برای شما به نمایش درمیآید.
در مرحله دوم، پرسیده میشود که میخواهید SqlMembershipProvider را نصب کنید و یا آن را حذف کنید. چون ما میخواهیم جدولها، نماها و رویههای ذخیره شده مورد نیاز SqlMembershipProvider را نصب کنیم، گزینه اول یعنی “Configure SQL Server for application services” را انتخاب میکنیم.
پس از وارد کردن اطلاعات پایگاه داده، Next را بزنید. در مرحله آخر خلاصهای از اطلاعات نمایش داده میشود. پس از پایان یافتن ویزارد، به Database Explorer مراجعه کنید. خواهید دید که جدولها، نماها و رویههای ذخیره شده به پایگاه داده اضافه شده است.
تا اینجا ما پایگاه داده مورد نیاز SqlMembershipProvider را ایجاد کردیم اما نیاز است که برای بستر عضویت مشخص کنیم که از SqlMembershipProvider استفاده کند و SqlMembershipProvider از پایگاه داده SecurityTutorials بهره برد.