FBA eta SQL Server: Maitasun istorio bat

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 (baita SQL kontsulta batean erabiltzaile-identifikazio bat edo beste hurbilketa batzuk txertatzea aurka).

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, hobea hitza eza, manually impersonating an AD user so that we could connect to SQL such that SQL data level security works.

Nahiz FBA ASP.NET film luzea da, dugu SharePoint Nation pertsona irakasten hainbat bilatzaileak zaren FBA bada neurketako duten, 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.

Hau ikertzen ditu, dugu berriro irakurri artikulu hau: ASP.NET izenean

Ikerketa gehiago ekarri digu codproject Artikulu honetan: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx

Lagundu duten gure kodea idatzi, which I’ve included below. It’s not the most elegant stuff, baina lan egin. I hope you find it helpful.

Hona hemen kodea Gurekin lan egin:

babesa void btnSearchCarrier_Click(objektu bidaltzailea, EventArgs e)
 {
 saiatu
 {
 U = ImpersonateUser berria ImpersonateUser();
 // DENAK: Ordezkatu kredentzialak
 ("DomainName", "UserName", "Password");

//
 CODE
//

 iU.Undo();
 }
 harrapatzeko (Exception ex)
 {

 }
 }

// Izenean klasea erabiliz gisa aipatu azpitik.

publikoak klasean ImpersonateUser
 {
 [DllImport("advapi32.dll", SetLastError = Egia)]
 publikoak estatiko kanpotik bool LogonUser(
 Katea lpszUsername,
 Katea lpszDomain,
 Katea lpszPassword,
 int dwLogonType,
 int dwLogonProvider,
 ref IntPtr phToken);

 [DllImport("kernel32.dll", Charset = CharSet.Auto)]
 pribatua kanpotik estatiko bool CloseHandle(IntPtr heldulekua);

 pribatua estatiko IntPtr tokenHandle = berria IntPtr(0);
 pribatua estatiko WindowsImpersonationContext impersonatedUser;

 // Txertatu duzun kode hau bada DLL bihurtu, ziur egon dela aldarrikatzeko
 // FullTrust dituzten eskailerak.
 [PermissionSetAttribute(SecurityAction.Demand, Izena = "FullTrust")]
 publikoak gal itxurak(katea domeinuarenizena, katea userName, katea pasahitza)
 {
 saiatu
 {

 // Erabili unmanaged LogonUser funtzioa erabiltzaileari tokenaren iritsi
 // zehaztu erabiltzailea, domeinua, eta pasahitza.
 eraikiak int LOGON32_PROVIDER_DEFAULT = 0;

 // Parametro hau pasatzen eragiten LogonUser lehen token bat sortzeko.
 eraikiak int LOGON32_LOGON_INTERACTIVE = 2;
 tokenHandle = IntPtr.Zero;

 // Urratsa -1 Deitu LogonUser helduleku bat lortzeko sarbide-token bat.
 bool returnValue = LogonUser(
 userName,
 domeinu izena,
 pasahitza,
 LOGON32_LOGON_INTERACTIVE,
 LOGON32_PROVIDER_DEFAULT,
 Jabetza tokenHandle); // tokenHandle - segurtasun-tokena

 bada (faltsua == returnValue)
 {
 int ret = Marshal.GetLastWin32Error();
 Console.WriteLine("LogonUser call failed with error code : " +
 eskubidea);
 bota berriak System.ComponentModel.Win32Exception(eskubidea);
 }

 // Urratsa - 2
 WindowsIdentity newId = berria WindowsIdentity(tokenHandle);
 // Urratsa -3
 impersonatedUser = newId.Impersonate();

 }
 harrapatzeko (Exception ex)
 {
 Console.WriteLine("Exception occurred. " + ex.Message);
 }
 }


 /// <laburpena>
 /// Geratu izenean
 /// </laburpena>
 publikoak gal Desegin()
 {
 impersonatedUser.Undo();
 // Free token.
 bada (tokenHandle != IntPtr.Zero)
 CloseHandle(tokenHandle);
 }
 }

</amaiera>

Nire blog Harpidetu.

Technorati Tags:

Pentsatu zen "FBA eta SQL Server: Maitasun istorio bat

  1. David goiztiarra
    Zerikusirik galdera hau posting Sentitzen dut baina ezin dut irudikatu nola bidal Blog honetako mezu elektroniko bat.
    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.
    Erantzun

Utzi iruzkin bat

Zure e-posta helbidea ez da argitaratuko. Beharrezko eremuak markatu dira *