Kollegani on työskennellyt web-osan FBA ympäristössä. Muun muassa, web-osan vetää joitakin tietoja SQL Serveristä. Grand suunnitelma hankkeen sanelee DBA määrittää tietojen suojausta SQL (sijaan upottamalla käyttäjätunnus SQL-kyselyn tai muu lähestymistapa).
Ongelmana on, että SQL server ei tiedä mitään FBA ympäristön, joten se voi luottaa meihin. Olemme ratkaisseet tämän ongelman, paremman puutteessa, manuaalisesti esiintyminen AD-käyttäjä, jotta emme voisi muodostaa SQL siten, että SQL tietojen tason security toimii.
Vaikka FBA on ASP.NET-ominaisuus, Olemme SharePoint kansakunnan ihmiset opetetaan eri hakukoneet että jos olet hakujen FBA, tarkoitat haluat osata kuinka jotta configure FBA SharePointissa. En ole löytänyt tietoja ottamisesta käyttöön FBA suuntautunut ASP.NET-sovelluksen kommunikoida SQL tarvitsimme tapa löytää.
Aikana tutkii tätä, Käymme läpi tämän artikkelin: ASP.NET tekeytyminen
Lisää tutkimusta johtanut codproject-artikkelissa: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx
Se auttoi meitä kirjoittamaan meidän koodi, jonka olen liittänyt alla. Se ei ole kaikkein tyylikkäin kamaa, mutta se toimi. Toivon, että löydät apua.
Tässä on koodi, joka toimi meille:
suojattu Void btnSearchCarrier_Click(lennättää, E-kirjain) { Yritä { ImpersonateUser iU = Uusi ImpersonateUser(); // TODO: Vaihda käyttäjätiedot iU.Impersonate("Toimialue", "UserName", "Salasana"); // KOODI // iU.Undo(); } saalis (Poikkeus ent.) { } } // Tekeytyminen-luokan, kuten jäljempänä. yleiset luokan ImpersonateUser { [DllImport("advapi32.dll", SetLastError = tosi)] yleiset staattinen extern bool LogonUser( Merkkijono lpszUsername, Merkkijono lpszDomain, Merkkijono lpszPassword, int dwLogonType, int dwLogonProvider, REF IntPtr-phToken); [DllImport("kernel32.dll", CharSet = CharSet.Auto)] Yksityinen extern staattinen bool CloseHandle(IntPtr kahva); Yksityinen staattinen IntPtr tokenHandle = Uusi IntPtr(0); Yksityinen staattinen WindowsImpersonationContext impersonatedUser; // Jos tämä koodi sisällyttää DLL, Muista vaatia että se // toimii FullTrust. [PermissionSetAttribute(SecurityAction.Demand, Nimi = "FullTrust")] yleiset mitätön Tekeydy(merkkijono toimialuenimi, merkkijono käyttäjätunnus, merkkijono salasana) { Yritä { // Saada käyttäjä Tokenin hallitsemattoman LogonUser-funktion avulla // määritetty käyttäjä, toimialueen, ja salasana. CONST-valiokunnan int LOGON32_PROVIDER_DEFAULT = 0; // Kulkee tämän parametrin aiheuttaa LogonUser luoda ensisijainen tunnussanoma. CONST-valiokunnan int LOGON32_LOGON_INTERACTIVE = 2; tokenHandle = IntPtr.Zero; // Askel -1 Kutsuu LogonUser-funktiota kahvan pääsyn tunnuksen hankkiminen. bool returnValue = LogonUser( Käyttäjätunnus, Toimialue, salasana, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, REF tokenHandle); // tokenHandle - uusi suojaustunnus Jos (False == returnValue) { int ret = Marshal.GetLastWin32Error(); Console.WriteLine("LogonUser epäonnistui virhekoodi : " + RET); heittää Uusi System.ComponentModel.Win32Exception(RET); } // Askel - 2 WindowsIdentity newId = Uusi WindowsIdentity(tokenHandle); // Askel -3 impersonatedUser = newId.Impersonate(); } saalis (Poikkeus ent.) { Console.WriteLine("Poikkeus. " + ex.Viesti); } } /// <Yhteenveto> /// Pysähtyy tekeytyminen /// </Yhteenveto> yleiset mitätön Kumoa() { impersonatedUser.Undo(); // Vapaa tunnukset. Jos (tokenHandle != IntPtr.Zero) CloseHandle(tokenHandle); } }
</loppu>