يجب استخدام اسم المستخدم أو معرف المستخدم للإشارة إلى مصادقة المستخدمين في ASP.NET

StackOverflow https://stackoverflow.com/questions/4911

  •  08-06-2019
  •  | 
  •  

سؤال

حتى في بلدي بسيطة التعلم الموقع, يمكنني استخدام المدمج في ASP.NET نظام التوثيق.

وأضاف أنا الآن الجدول المستخدم لحفظ الأشياء مثل zip, DOB.... الخسؤالي هو:

  1. في الجدول الجديد ، يجب أن المفتاح يكون اسم المستخدم (السلسلة) أو معرف المستخدم وهو أن GUID يبحث عدد يستخدمونها في asp_ tables.
  2. إذا كان أفضل الممارسات لاستخدام هذا القبيح guid, لا أحد يعرف كيفية الحصول عليها ؟ يبدو أن لا يمكن الوصول إليها بسهولة مثل اسم (System.Web.HttpContext.Current.User.Identity.Name)
  3. إذا كنت أقترح استخدام لا (لا guid ولا اسم المستخدم الحقول التي تقدمها ASP.NET المصادقة) ثم كيف أفعل ذلك مع ASP.NET المصادقة ؟ خيار واحد يعجبني هو استخدام عنوان البريد الإلكتروني المستخدم لتسجيل الدخول, ولكن كيف يمكنني جعل ASP.NET نظام التوثيق استخدام عنوان البريد الإلكتروني بدلا من اسم المستخدم ؟ (أو لا يوجد شيء للقيام به هناك, انها مجرد لي البت أنا "أعلم" اسم المستخدم هو في الواقع عنوان بريد إلكتروني ؟

يرجى ملاحظة ما يلي:

  • أنا لا أسأل عن كيفية الحصول على GUID في .صافي أنا أشير فقط إلى userID عمود في asp_ tables كما guid.
  • اسم المستخدم فريدة من نوعها في ASP.NET المصادقة.
هل كانت مفيدة؟

المحلول

أود أن أقترح باستخدام اسم المستخدم المفتاح الأساسي في الجدول إذا كان اسم المستخدم هو الذهاب إلى أن تكون فريدة من نوعها ، وهناك بضعة أسباب وجيهة للقيام بذلك:

  1. المفتاح الأساسي سيكون فهرس متفاوت المسافات وبالتالي البحث عن المستخدمين التفاصيل عبر اسم المستخدم الخاص بهم سوف تكون سريعة جدا.
  2. فإنه سوف يتوقف عن تكرار أسماء من الظهور
  3. كنت لا داعي للقلق حول استخدام اثنين من مختلف بيسيس المعلومات (اسم المستخدم أو guid)
  4. أنها سوف تجعل كتابة التعليمات البرمجية أسهل بكثير بسبب عدم وجود بحث اثنين بت من المعلومات.

نصائح أخرى

يجب عليك استخدام بعض معرف فريد ، إما GUID ذكر أو بعض السيارات الأخرى المولدة الرئيسية.غير أن هذا الرقم لا ينبغي أبدا أن تكون مرئية للمستخدم.

فائدة كبيرة من هذا هو أن كافة التعليمات البرمجية الخاصة بك يمكن أن تعمل على هوية المستخدم ، ولكن اسم المستخدم ليست مرتبطة ذلك.ثم يمكن للمستخدم تغيير اسم (التي وجدتها مفيدة في المواقع).هذا هو مفيدة بشكل خاص إذا كنت تستخدم عنوان البريد الإلكتروني للمستخدم تسجيل الدخول...وهو مناسب جدا للمستخدمين (ثم لم يكن لديك أن نتذكر 20 معرفات في القضية المشتركة "معرف المستخدم" هو واحد شعبية).

يجب عليك استخدام معرف المستخدم.إنه ProviderUserKey ممتلكات MembershipUser.

Guid UserID = new Guid(Membership.GetUser(User.Identity.Name).ProviderUserKey.ToString());

وأود أن استخدام معرف المستخدم.إذا كنت ترغب في استخدام اسم المستخدم, أنت ذاهب لجعل "تغيير اسم المستخدم" ميزة مكلفة جدا.

أنا أتفق مع Palmsey, رغم ذلك يبدو أن هناك القليل من خطأ في التعليمات البرمجية:

Guid UserID = new Guid(Membership.GetUser(User.Identity.Name)).ProviderUserKey.ToString());

يجب أن يكون

Guid UserID = new Guid(Membership.GetUser(User.Identity.Name).ProviderUserKey.ToString());

أود أن أقول استخدام معرف المستخدم حتى أسماء لا يزال يمكن أن تتغير دون أن يؤثر ذلك المفتاح الأساسي.وأود أيضا تعيين اسم المستخدم العمود أن تكون فريدة من نوعها لوقف تكرار أسماء المستخدمين.

إذا كنت سوف تكون أساسا البحث على اسم المستخدم بدلا من اسم المستخدم ثم جعل اسم المستخدم فهرس متفاوت المسافات و تعيين المفتاح الأساسي غير متفاوت.هذا وسوف تعطيك أسرع الوصول عند البحث عن أسماء المستخدمين, إذا كان ذلك سوف تكون أساسا في البحث عن UserIds ثم ترك هذا فهرس متفاوت المسافات.

تحرير :وهذا أيضا سوف تناسب بشكل أفضل مع التيار ASP.Net عضوية الجداول كما أنها أيضا استخدام معرف المستخدم كمفتاح أساسي.

هذا هو القديم ولكن أريد فقط الناس الذين يجدون هذه الإشارة إلى بعض الأمور:

  1. Aspnet قاعدة بيانات عضوية هو الأمثل عندما يتعلق الأمر إلى الوصول إلى سجلات المستخدم.فهرس متفاوت المسافات تسعى (الأمثل) في sql server يستخدم عندما سجل بحثت عن استخدام loweredusername و applicationid.وهذا ما يجعل الكثير من معانيها كما يمكننا تزويد المستخدم إلى الذهاب عند قيام المستخدم بإرسال بيانات الاعتماد الخاصة بهم.

  2. Guid userid سوف تعطي أكبر مؤشر الحجم من الباحث ولكن هذا ليس حقا كبيرة لأننا في كثير من الأحيان سوى استرداد 1 سجل (المستخدم) في الوقت من حيث التجزؤ ، وعدد من يقرأ عادة جريتيلي تفوق عدد يكتب و التعديلات إلى المستخدمين الجدول الناس ببساطة لا تحديث المعلومات كل ذلك في كثير من الأحيان.

  3. على regsql السيناريو الذي يخلق aspnet عضوية الجداول يمكن تحريرها بحيث بدلا من استخدام NEWID كما الافتراضي userid ، فإنه يمكن استخدام NEWSEQUENTIALID() التي توفر أداء أفضل (لقد لمحة من هذا).

  4. الملف الشخصي.شخص ما خلق "التعلم الجديد موقع" يجب أن لا نحاول إعادة اختراع العجلة.واحدة من المواقع التي عملت استخدام مربع نص من aspnet عضوية الجداول (باستثناء الرهيبة ملف النظام) و المستخدمين الجدول الوارد ما يقرب من 2 مليون مستخدم السجلات.حتى مع هذا العدد الكبير من الوثائق ، ويختار ما زالت بسرعة لأن كما قلت أن تبدأ مع قاعدة البيانات والفهارس التركيز على loweredusername+applicationid إلى مجندين البحث عن فهرس متفاوت المسافات على هذه السجلات ، وبصفة عامة ، إذا كان sql تقوم بعمل فهرس متفاوت المسافات تسعى إلى العثور على 1 سجل, لم يكن لديك أي مشاكل حتى مع أعداد هائلة من الوثائق بشرط أن لا إضافة أعمدة إلى الجداول وبدء سحب الكثير من البيانات.

  5. القلق حول guid في هذا النظام, لي, على أساس الأداء الفعلي و تجربة النظام السابق لأوانه الأمثل.إذا كان لديك الباحث عن اسم المستخدم الخاص بك ولكن النظام ينفذ دون المستوى الأمثل الاستفسارات بسبب العرف تصميم الفهرس.... الخالنظام لن مقياس جيد.Microsoft الرجال عموما عمل جيد مع aspnet عضوية db و هناك العديد من الأمور الإنتاجية إلى التركيز على من تغيير معرف المستخدم إلى int.

وأود أن استخدام السيارات تزايد عدد عادة int.

كنت تريد أن تبقي على حجم المفتاح صغيرة قدر الإمكان.وهذا يجعل مؤشر صغيرة وفوائد أي المفاتيح الخارجية كذلك.أديتونالي كنت لا بإحكام اقتران بيانات التصميم الخارجي بيانات المستخدم (هذا ينطبق على aspnet GUID كذلك).

عموما Guid لا تجعل جيدة المفاتيح الأساسية كما هي كبيرة و يمكن إدراج يحتمل أن يحدث في أي صفحة البيانات داخل الجدول وليس في آخر صفحة البيانات.والاستثناء الرئيسي لهذا هو إذا كنت تقوم بتشغيل mutilple نسخ قواعد البيانات.GUIDs مفيدة جدا المفاتيح في هذا السيناريو, ولكن أنا على التخمين لديك واحد فقط في قاعدة البيانات حتى هذه ليست مشكلة.

إذا كنت تريد الذهاب إلى استخدام LinqToSql من أجل التنمية ، أود أن أوصي باستخدام الباحث باعتباره المفتاح الأساسي.لقد كان العديد من القضايا عندما كان لدي علاقات مبنية من غير الباحث المجالات ، حتى عندما nvarchar(x) مجال صعوبات لجعلها فريدة من نوعها المجال.

لست متأكدا إذا كان هذا هو علة معروفة في LinqToSql أو ما ، ولكن كانت لدي مشاكل معها على المشروع الحالي و كان علي أن أبدل PKs و FKs على عدة جداول.

أنا أتفق مع مايك الحجر.أود أن أقترح أيضا فقط باستخدام GUID في حال كنت تنوي أن تتبع كمية هائلة من البيانات.وإلا بسيط السيارات تزايد عدد صحيح (Id) عمود لن يكون كافيا.

إذا كنت بحاجة GUID .صافي هو جميل بما فيه الكفاية التي يمكنك الحصول على واحدة بسيطة...

Dim guidProduct As Guid = Guid.NewGuid()

أو

Guid guidProduct = Guid.NewGuid();

انا اتفق مع مايك الحجر أيضا.بلدي الشركة نفذت مؤخرا مستخدم جديد طاولة خارج العملاء (بدلا من المستخدمين الداخليين الذين من خلال مصادقة LDAP).بالنسبة للمستخدمين الخارجيين ، اخترنا أن تخزين GUID كما المفتاح الأساسي و تخزين اسم المستخدم varchar مع فريدة من نوعها القيود على حقل اسم المستخدم.

أيضا, إذا كنت تنوي تخزين كلمة المرور في الميدان ، وأنا أوصي تخزين كلمة المرور كما المملحة ، تجزئته الثنائية في قاعدة البيانات.بهذه الطريقة, إذا كان شخص ما هاك قاعدة البيانات الخاصة بك, أنها سوف لا يكون لديك الوصول إلى العملاء الخاصة بك وكلمات السر.

وأود أن استخدام المعرف الفريد العمومي في قانون بلدي و كما سبق ذكره وهو عنوان البريد الإلكتروني المستخدم.هو بعد كل شيء ، بالفعل فريدة لا تنسى بالنسبة للمستخدم.ربما حتى خندق guid (v.debateable).

ذكر أحدهم باستخدام فهرس متفاوت المسافات على GUID إذا كان هذا المستخدم في التعليمات البرمجية الخاصة بك.وأود أن تجنب هذا ، خاصة إذا كان إدراج عالية ؛ المؤشر سيتم بناؤها في كل مرة كنت أدخل رقما قياسيا.فهارس متفاوتة المسافات على السيارات زيادة معرفات رغم ذلك لأن سجلات جديدة إلحاق فقط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top