FBA ו- SQL Server: סיפור אהבה

עמיתי עובד על web part סביבה FBA. בין היתר, ה-web part מושך כמה נתונים מ- SQL server. התוכנית עבור פרויקט זה מכתיב DBA הגדרת רמת אבטחת נתונים ב- SQL (בניגוד הטבעת מזהה משתמש בשאילתת SQL או מסוימים גישה אחרים).

הבעיה היא כי שרת SQL שאינו יודע דבר על סביבתנו FBA אז זה לא יכולה לסמוך עלינו. פתרנו בעיה זו על-ידי, מחוסר מילה טובה יותר, באופן ידני של המודעה משתמש מתחזה כך אנחנו יכולים להתחבר SQL כך נתוני SQL ברמה עבודות אבטחה.

אף-על-פי FBA היא תכונה ASP.NET, אנחנו האנשים SharePoint האומה לימדו ממנועי החיפוש השונים זה אם אתה עליו מבוצעת שאילתה עבור FBA, אתה אומר שאתה רוצה לדעת כיצד להגדיר FBA ב- SharePoint. שלא הצלחתי למצוא למצוא כל מידע אודות הפעלת FBA מונחה יישום ASP.NET כדי לתקשר עם SQL בדרך שאנחנו צריכים.

במהלך מחקר זה, קראנו מחדש את המאמר הזה: ב- ASP.NET התחזות

עוד מחקר הוביל אותנו למאמר codproject: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx

זה עזר לנו לכתוב את הקוד שלנו, אשר כללתי מתחת. . זה לא הדבר הכי אלגנטי, אבל זה עבד. אני מקווה שתמצא את זה מועיל.

. הנה הקוד אשר עבדה בשבילנו:

מוגן btnSearchCarrier_Click חלל(אובייקט השולח, EventArgs e)
 {
 נסה
 {
 ImpersonateUser iU = חדש ImpersonateUser();
 // TODO: להחליף את האישורים iU.Impersonate("DomainName", "שם משתמש", "סיסמה");

//
 קוד
//

 iU.Undo();
 }
 לתפוס (חריגה ex)
 {

 }
 }

// באמצעות התחזות השיעור כאמור להלן.

הציבור מחלקה ImpersonateUser
 {
 [DllImport("advapi32.dll", SetLastError = נכון)]
 הציבור סטטי מחלקת מיסוי וחשבונאות בול LogonUser(
 מחרוזת lpszUsername,
 מחרוזת lpszDomain,
 מחרוזת lpszPassword,
 int dwLogonType,
 int dwLogonProvider,
 ref IntPtr phToken);

 [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
 פרטי מחלקת מיסוי וחשבונאות סטטי בול CloseHandle(ידית IntPtr);

 פרטי סטטי IntPtr tokenHandle = חדש IntPtr(0);
 פרטי סטטי WindowsImpersonationContext impersonatedUser;

 // אם את מקבלת את הקוד הזה לתוך קובץ DLL, הקפידו לדרוש זה הכל
 // רץ עם FullTrust.
 [PermissionSetAttribute(SecurityAction.Demand, שם = "FullTrust")]
 הציבור התחזה void(מחרוזת domainName, מחרוזת שם משתמש, מחרוזת סיסמה)
 {
 נסה
 {

 // השתמש בפונקציה LogonUser לא מנוהלים כדי לקבל את המשתמש token עבור
 // המשתמש שצוין, תחום, ואת הסיסמה.
 const int LOGON32_PROVIDER_DEFAULT = 0;

 // העברת פרמטר זה גורמת LogonUser ליצור אסימון ראשי.
 const int LOGON32_LOGON_INTERACTIVE = 2;
 tokenHandle = IntPtr.Zero;

 // שלב -1 להתקשר LogonUser כדי לקבל נקודת אחיזה כדי אסימון גישה.
 בול returnValue = LogonUser(
 שם משתמש,
 domainName,
 סיסמה,
 LOGON32_LOGON_INTERACTIVE,
 LOGON32_PROVIDER_DEFAULT,
 ref tokenHandle); // tokenHandle - אסימון האבטחה החדש

 אם (false = = returnValue)
 {
 int ret = Marshal.GetLastWin32Error();
 Console.WriteLine("LogonUser השיחה נכשלה עם קוד השגיאה : " +
 ret);
 לזרוק System.ComponentModel חדש.Win32Exception(ret);
 }

 // שלב - 2
 WindowsIdentity newid ב = חדש WindowsIdentity(tokenHandle);
 // שלב -3
 impersonatedUser = newId.Impersonate();

 }
 לתפוס (חריגה ex)
 {
 Console.WriteLine("אירעה חריגה. " + . לשעבר.ההודעה);
 }
 }


 /// <סיכום>
 /// תחנות התחזות
 /// </סיכום>
 הציבור בטל void()
 {
 impersonatedUser.Undo();
 // חינם האסימונים.
 אם (tokenHandle != IntPtr.Zero)
 CloseHandle(tokenHandle);
 }
 }

</קצה>

מנוי על הבלוג שלי.

תגיות טכנורטי:

תגובה אחת על הפוסט "FBA ו- SQL Server: סיפור אהבה

  1. דוד מוקדם
    מצטער על פרסום זה שאלה לא קשורה, אבל אני לא מצליח להבין כיצד לשלוח אליך דואר אלקטרוני מהבלוג הזה.
    היה לך פוסט הקודם שבו הצעת דרך מצוינת לסינון ספריה כדי להציג את הנתונים שאינם מתויגים. ? יש לך רעיון כיצד עשוי להציג רשימה של מסמכים לא מתויגים בספריה מסמך שלם אצלך? באמצעות שדה ריק בחיפוש מתקדם לא תחזיר תוצאות כלשהן.

תשאיר הודעה

כתובת האימייל שלך לא תפורסם. שדות חובה מסומנים *