FBA ja SQL Server: Rakkaustarina

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>

Tilaa blogiin.

Technorati Tags:

Yksi ajatelleet ”FBA ja SQL Server: Rakkaustarina

  1. David aikaisin
    Sorry for lähettämistä liity kysymykseen, mutta voinut selvittää, miten lähettää sinulle sähköpostia tästä blogista.
    Sinulla oli Edellinen viesti, jossa tarjolla loistava tapa suodattaa kirjaston korvamerkittöminä tietojen tarkasteleminen. Onko sinulla mitään ajatuksia siitä, kuinka korvamerkittöminä asiakirjojen luetteloa voi tarkastella koko asiakirjakirjaston? Tyhjä kentän haku ei palauta mitään tuloksia.
    Vastaus

Jätä vastaus

Sähköpostiosoitettasi ei julkaista. pakolliset kentät on merkitty *