اطلاعات گذرواژه در جدول aspnet_Membership نگهداری میشود. SqlMembershipProvider این امکان را در اختیار قرار میدهد که گذرواژه به یکی از سه روش زیر نگهداری شود:
· Clear: گذرواژه در بانک اطلاعاتی به صورت متن ساده نگهداری می شود.
· Hashed: گذرواژه به وسیله یکی از الگوریتمهای موجود Hash شده و در بانک اطلاعاتی نگهداری میشود.
· Encrypted: گذرواژه رمزنگاری شده در بانک اطلاعاتی نگهداری میشود.
فنآوری نگهداری گذرواژه در بانک اطلاعاتی بستگی به تنظیمات مشخص شده SqlMembershipProvider در Web.config دارد. ما در گام چهارم به بررسی تنظیمات SqlMembershipProvider میپردازیم. فنآوری پیش فرض برای نگهداری گذرواژه، روش Hashed میباشد.
ستونهای مربوط به گذرواژه Password, PasswordFormat و PasswordSalt هستند. PasswordFormat از نوع int است که عدد مربوط به فنآوری نگهداری گذرواژه را شامل میشود: عدد 0 برای Clear، عدد 1 برای Hashed و عدد 2 برای Encrypted. PasswordSalt یک رشته متنی صرف نظر از اینکه چه فنآوری برای نگهداری گذرواژه استفاده شده است، تولید میکند؛ مقدار PasswordSalt فقط هنگام محاسبه در فنآوری Hashed استفاده میشود. و در پایان فیلد Password که مقدار واقعی گذرواژه را به صورت متن ساده، Hash شده و یا رمزنگاری شده نگهداری میکند.
جدول زیر نگهداری گذرواژه MySecret! را به سه روش نشان میدهد:
اطلاعات حساب های کاربری در دو جدول نگهداری می شود: aspnet_Users و aspnet_Membership. جدول aspnet_Users فیلدهایی برای نگهداری اطلاعات ضروری حساب کاربر دارد. مهمترین سه فیلد عبارتند از:
· UserId
· UserName
· ApplicationId
UserId کلید اصلی است (با نوع uniqueidentifier). UserName از نوع nvarchar(256)، و همراه با گذرواژه اعتبارنامه کاربر را ایجاد میکنند (گذرواژه کاربر در جدول Membership نگهداری می شود). فیلد ApplicationId حساب کاربری را به یک برنامه خاص در جدول aspnet_Applications ارتباط می دهد.
جدول Membership شامل اطلاعات اضافی حساب کاربری است؛ مانند: گذرواژه کاربر، نشانی رایانامه، تاریخ و ساعت آخرین ورود به سیستم و غیره. یک تناظر یک به یک بین رکوردهای جداول aspnet_Users و aspnet_Membership وجود دارد. این ارتباط با فیلد UserId در جدول aspnet_Membership که به عنوان کلید اصلی قرارداده شده است، تضمین میشود. همانند جدول aspnet_Users، جدول aspnet_Membership نیز دارای فیلد ApplicationId است که مشخص میکند اطلاعات هر رکورد مربوط به کدام برنامه است.
بسترهای عضویت و نقش ها طوری طراحی شده اند که بتواند محل نگهداری کاربران و نقش ها را بین تعدادی برنامه به اشتراک گذارد. یک برنامه 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 در این جداول مشخص می کند که کدام قسمت محل نگهداری کاربران و نقش ها به کدام برنامه تعلق دارد.