FBA و SQL Server: قصة حب

وقد عملت زميلي في جزء ويب في بيئة FBA. أمور أخرى, جزء ويب تسحب بعض البيانات من ملقم SQL. ويملي الخطة الكبرى لهذا المشروع أن ديسيبل تكوين أمان مستوى البيانات في SQL (بدلاً من تضمين معرف مستخدم في استعلام SQL أو بعض النهج الأخرى).

والمشكلة أن SQL server لا تعرف شيئا عن بيئتنا FBA حيث أنها لا يمكن أن تثق بنا. أننا نجحنا في حل هذه المشكلة عن طريق, لعدم وجود كلمة أفضل, انتحال مستخدم AD يدوياً حيث أن نحن يمكن الاتصال ب SQL مثل أن البيانات SQL مستوى الأمن يعمل.

على الرغم من أن FBA سمة ASP.NET, ونحن أبناء الأمة SharePoint قد تدرس محركات البحث المختلفة التي إذا كنت تقوم باستعلامها ل FBA, ويجب أن يعني أنك تريد معرفة كيفية تكوين FBA في SharePoint. أخفقت في العثور على العثور على أية معلومات حول كيفية تمكين FBA موجهة نحو تطبيق ASP.NET التواصل مع مزود بالطريقة التي كنا بحاجة.

أثناء البحث في هذا, علينا إعادة قراءة هذا المقال: تمثيل ASP.NET

إجراء المزيد من البحوث قد أدى بنا إلى هذه المقالة كودبروجيكت: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx

التي ساعدتنا على كتابة التعليمات البرمجية الخاصة بنا, ولقد المدرجة أدناه. أنها ليست الأشياء الأكثر أناقة, بل أنها عملت. أمل أن تجد أنه من المفيد.

هنا هو التعليمات البرمجية التي عملت بالنسبة لنا:

محمية btnSearchCarrier_Click باطلة(الكائن المرسل, EventArgs ه)
 {
 حاول
 {
 وحدة إيمبيرسوناتيوسير = الجديد إيمبيرسوناتيوسير();
 // تودو: استبدال iU.Impersonate وثائق التفويض("اسم المجال", "اسم المستخدم", "كلمة المرور");

//
 مدونة
//

 iU.Undo();
 }
 الصيد (استثناء ex)
 {

 }
 }

// استخدام فئة الانتحال كما هو مذكور أدناه.

العامة فئة إيمبيرسوناتيوسير
 {
 [DllImport("advapi32.dll", سيتلاستيرور = صحيح)]
 العامة ثابت extern bool LogonUser(
 سلسلة لبسزوسيرنامي,
 سلسلة لبسزدومين,
 سلسلة لبسزباسورد,
 دولوجونتيبي كثافة العمليات,
 دولوجونبروفيدير كثافة العمليات,
 ref فتوكين IntPtr);

 [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
 القطاع الخاص extern ثابت bool CloseHandle(مقبض IntPtr);

 القطاع الخاص ثابت توكينهاندلي IntPtr = الجديد IntPtr(0);
 القطاع الخاص ثابت إيمبيرسوناتيدوسير ويندووسيمبيرسوناتيونكونتيكست;

 // إذا قمت بدمج هذه التعليمات البرمجية في ملف DLL, ومن المؤكد أن المطالبة بأن
 // يعمل مع FullTrust.
 [بيرميسيونسيتاتريبوتي(SecurityAction.Demand, اسم = "FullTrust")]
 العامة انتحال شخصية باطلة(سلسلة اسم المجال, سلسلة اسم المستخدم, سلسلة كلمة المرور)
 {
 حاول
 {

 // استخدم الدالة LogonUser غير المدارة للحصول على الرمز المميز للمستخدم
 // المستخدم المحدد, المجال, وكلمة المرور.
 const int LOGON32_PROVIDER_DEFAULT = 0;

 // تمرير هذه المعلمة يؤدي LogonUser إنشاء رمز مميز الابتدائي.
 const int LOGON32_LOGON_INTERACTIVE = 2;
 توكينهاندلي = IntPtr.Zero;

 // الخطوة -1 استدعاء LogonUser الحصول على مؤشر إلى الرمز مميز للوصول.
 bool returnValue = LogonUser(
 اسم المستخدم,
 اسم المجال,
 كلمة المرور,
 LOGON32_LOGON_INTERACTIVE,
 LOGON32_PROVIDER_DEFAULT,
 توكينهاندلي ref); // توكينهاندلي - رمز أمان مميز جديد

 إذا كان (= false returnValue)
 {
 int ret = Marshal.GetLastWin32Error();
 Console.WriteLine("فشل استدعاء LogonUser مع رمز الخطأ : " +
 والمقصود بالصندوق);
 رمي System.ComponentModel الجديدة.Win32Exception(والمقصود بالصندوق);
 }

 // الخطوة - 2
 WindowsIdentity newId = الجديد WindowsIdentity(توكينهاندلي);
 // الخطوة -3
 إيمبيرسوناتيدوسير = newId.Impersonate();

 }
 الصيد (استثناء ex)
 {
 Console.WriteLine("حدث استثناء. " + السابقين.رسالة);
 }
 }


 /// <موجز>
 /// توقف عن التمثيل
 /// </موجز>
 العامة تراجع باطلة()
 {
 impersonatedUser.Undo();
 // مجاناً المميزة.
 إذا كان (توكينهاندلي != IntPtr.Zero)
 CloseHandle(توكينهاندلي);
 }
 }

</نهاية>

الاشتراك في بلادي بلوق.

[تشنورتي] بطاقات:

فكره واحده بخصوص "FBA و SQL Server: قصة حب

  1. ديفيد في وقت مبكر
    عذراً لنشر هذا مسألة غير ذات صلة ولكن لم أستطع معرفة كيفية إرسال رسالة بريد إلكتروني من هذا بلوق.
    كان لديك وظيفة سابقة حيث تقدم لك طريقة رائعة لتصفية مكتبة لعرض البيانات غير المميزة. هل لديك أية أفكار حول كيف يمكن عرض قائمة بالمستندات غير المميزة في مكتبة مستند بأكمله? استخدام حقل فارغ في البحث المتقدم لا يقوم بإرجاع أية نتائج.
    الرد

اترك ردًا

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها *