FBA და SQL Server: სიყვარულის ბალადა

My colleague has been working on a web part in an FBA environment. Among other things, the web part pulls some data from SQL server. The grand plan for this project dictates that a DBA configures data level security in SQL (განსხვავებით embedding მომხმარებლის ID in SQL შეკითხვაზე ან სხვა მიდგომა).

The problem is that SQL server doesn’t know anything about our FBA environment so it can’t trust us. We solved this problem by, გამო უკეთესი სიტყვა, manually impersonating an AD user so that we could connect to SQL such that SQL data level security works.

მიუხედავად იმისა, რომ FBA არის ASP.NET ფუნქცია, ჩვენ SharePoint Nation ადამიანი ისწავლება სხვადასხვა საძიებო რომ თუ თქვენ querying for FBA, you must mean you want know how to configure FBA in SharePoint. I failed to find find any information on how to enable an FBA oriented ASP.NET application to communicate with SQL in the way we needed.

რა თქმა უნდა, იკვლევს ამ, ჩვენ ხელახლა წაიკითხავს ამ მუხლის: ASP.NET Impersonation

დამატებითი კვლევები მიგვიყვანა ამ codproject მუხლის: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx

ეს დაგვეხმარა წერენ ჩვენი კოდი, which I’ve included below. It’s not the most elegant stuff, but it worked. I hope you find it helpful.

აი კოდი, რომელიც მუშაობდა ჩვენთვის:

დაცული ბათილად btnSearchCarrier_Click(ობიექტის გამგზავნი, EventArgs e)
 {
 ვცდილობთ
 {
 U = ImpersonateUser ახალი ImpersonateUser();
 // ყველა: ჩანაცვლება მიდგომებით
 ("DomainName", "UserName", "Password");

//
 კოდი
//

 iU.Undo();
 }
 დაჭერა (გამონაკლისი ყოფილი)
 {

 }
 }

// გამოყენება Impersonation კლასი როგორც ქვემოთ მითითებულ.

საჯარო კლასი ImpersonateUser
 {
 [DllImport("advapi32.dll", SetLastError = ნამდვილი)]
 საჯარო სტატიკური გარე bool LogonUser(
 სიმებიანი lpszUsername,
 სიმებიანი lpszDomain,
 სიმებიანი lpszPassword,
 int dwLogonType,
 int dwLogonProvider,
 ref IntPtr phToken);

 [DllImport("kernel32.dll", ცხრილი = CharSet.Auto)]
 შეტყობინების გარე სტატიკური bool CloseHandle(IntPtr სახელური);

 შეტყობინების სტატიკური IntPtr tokenHandle = ახალი IntPtr(0);
 შეტყობინების სტატიკური WindowsImpersonationContext impersonatedUser;

 // თუ თქვენ ჩართული ამ კოდი შევიდა DLL, რა თქმა უნდა მოითხოვოს, რომ იგი
 // ეშვება ერთად FullTrust.
 [PermissionSetAttribute(SecurityAction.Demand, სახელი = "FullTrust")]
 საჯარო ძალადაკარგულად Impersonate(სიმებიანი DomainName, სიმებიანი ნიკი, სიმებიანი დაგავიწყდათ)
 {
 ვცდილობთ
 {

 // გამოყენება უმართავი LogonUser ფუნქცია მისაღებად შესახებ ნიშნად for
 // მითითებულ შესახებ, დომენის, და პაროლი.
 const int LOGON32_PROVIDER_DEFAULT = 0;

 // გამსვლელი ამ პარამეტრის იწვევს LogonUser რათა შეიქმნას პირველადი ნიშნად.
 const int LOGON32_LOGON_INTERACTIVE = 2;
 tokenHandle = IntPtr.Zero;

 // ნაბიჯი -1 ზარის LogonUser მოპოვება handle to დაშვების ნიშნად.
 bool returnValue = LogonUser(
 ნიკი,
 დომენი,
 დაგავიწყდათ,
 LOGON32_LOGON_INTERACTIVE,
 LOGON32_PROVIDER_DEFAULT,
 ქონების tokenHandle); // tokenHandle - უსაფრთხოების ახალი ნიშნად

 თუ (ყალბი == returnValue)
 {
 int ret = Marshal.GetLastWin32Error();
 Console.WriteLine("LogonUser call failed with error code : " +
 უფლება);
 სახიფათოა ახალი System.ComponentModel.Win32Exception(უფლება);
 }

 // ნაბიჯი - 2
 WindowsIdentity newId = ახალი WindowsIdentity(tokenHandle);
 // ნაბიჯი -3
 impersonatedUser = newId.Impersonate();

 }
 დაჭერა (გამონაკლისი ყოფილი)
 {
 Console.WriteLine("Exception occurred. " + ex.Message);
 }
 }


 /// <შემაჯამებელი>
 /// წყვეტს impersonation
 /// </შემაჯამებელი>
 საჯარო ძალადაკარგულად გაუქმება()
 {
 impersonatedUser.Undo();
 // გასათავისუფლებლად სიმბოლოს.
 თუ (tokenHandle != IntPtr.Zero)
 CloseHandle(tokenHandle);
 }
 }

</ბოლო>

გამოწერა ჩემი დღიური.

პროგრამები Tags:

ერთი ფიქრობდა შესახებ "FBA და SQL Server: სიყვარულის ბალადა

  1. დავით ადრეული
    Sorry for posting this unrelated question but I could not figure out how to send you an email from this blog.
    You had a previous post where you offered a great way to filter a library to view untagged data. Do you have any thoughts as to how you might view a list of untagged documents in an entire document library? Using an empty field in advanced search does not return any results.

დატოვე პასუხი

თქვენი ელ-ფოსტა არ გამოქვეყნდება. აუცილებელი ველები მონიშნულია *