FBA og SQLServer: En kjærlighetshistorie

Min kollega har jobbet med en webdel i et FBA-miljø. Blant annet, webdelen trekker data fra SQLServer. Grand plan for dette prosjektet tilsier at en DBA konfigurerer datasikkerhet i SQL (i motsetning til bygge en bruker-ID i en SQL-spørring eller noen andre tilnærming).

Problemet er at SQLServer ikke vet noe om FBA miljøet så det ikke stoler på oss. Vi løste problemet ved, mangel av et bedre ord, manuelt representerer en AD-bruker slik at vi kan koble til SQL slik at SQL-data nivå sikkerhet fungerer.

Selv om FBA er en ASP.NET-funksjon, Vi SharePoint Nation folk har undervist på ulike søkemotorer som hvis du spør for FBA, du må mener du vil vite hvordan du konfigurerer FBA i SharePoint. Jeg kunne ikke finne finne informasjon om hvordan du aktiverer et FBA orientert ASP.NET-program til å kommunisere med SQL i måten vi trengte.

I undersøker dette, Vi re-lese denne artikkelen: ASP.NET representasjon

Mer forskning førte oss til denne codproject artikkelen: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx

Som hjalp oss å skrive koden vår, som jeg har tatt under. Det er ikke den mest elegante ting, bortsett fra den arbeidet. Jeg håper du finner det nyttig.

Her er koden som fungerte for oss:

beskyttet Ugyldig btnSearchCarrier_Click(objektet avsender, EventArgs kan e)
 {
 Prøv
 {
 ImpersonateUser IE = nye ImpersonateUser();
 // TODO: Erstatte legitimasjon iU.Impersonate(«Domenenavn», "Brukernavn", "Passord");

//
 KODE
//

 iU.Undo();
 }
 fange (Unntak ex)
 {

 }
 }

// Bruke representasjon klassen som nevnt nedenfor.

offentlig klassen ImpersonateUser
 {
 [DllImport("advapi32.dll", SetLastError = sann)]
 offentlig statisk extern bool LogonUser(
 Streng lpszUsername,
 Streng lpszDomain,
 Streng lpszPassword,
 int dwLogonType,
 int dwLogonProvider,
 REF IntPtr phToken);

 [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
 privat extern statisk bool CloseHandle(IntPtr håndtak);

 privat statisk IntPtr tokenHandle = nye IntPtr(0);
 privat statisk WindowsImpersonationContext impersonatedUser;

 // Hvis du innlemme denne koden i en DLL, Sørg for å kreve at det
 // kjører FullTrust.
 [PermissionSetAttribute(SecurityAction.Demand, Navn = "FullTrust")]
 offentlig Ugyldig opptre(streng domenenavn, streng brukernavn, streng passord)
 {
 Prøv
 {

 // Bruk funksjonen for uovervåkede LogonUser hente token for
 // den angitte brukeren, domene, og passord.
 konst int LOGON32_PROVIDER_DEFAULT = 0;

 // Passerer denne parameteren forårsaker LogonUser opprette primærtoken.
 konst int LOGON32_LOGON_INTERACTIVE = 2;
 tokenHandle = IntPtr.Zero;

 // Trinn -1 Påloggingsøkten for å få en referanse til et tilgangstoken.
 Boolsk returnValue = LogonUser(
 Brukernavn,
 Domenenavn,
 passord,
 LOGON32_LOGON_INTERACTIVE,
 LOGON32_PROVIDER_DEFAULT,
 REF tokenHandle); // tokenHandle - ny sikkerhetskode

 Hvis (== False returnValue)
 {
 int ret = Marshal.GetLastWin32Error();
 Console.WriteLine("LogonUser kallet mislyktes med feilkode : " +
 ret);
 kaste nye System.ComponentModel.Win32Exception(ret);
 }

 // Trinn - 2
 WindowsIdentity newId = nye WindowsIdentity(tokenHandle);
 // Trinn -3
 impersonatedUser = newId.Impersonate();

 }
 fange (Unntak ex)
 {
 Console.WriteLine("Unntak oppstod. " + ex.Melding);
 }
 }


 /// <Sammendrag>
 /// Stopper representasjon
 /// </Sammendrag>
 offentlig Ugyldig angre()
 {
 impersonatedUser.Undo();
 // Gratis tokenene.
 Hvis (tokenHandle != IntPtr.Zero)
 CloseHandle(tokenHandle);
 }
 }

</slutten>

Abonner på bloggen min.

Technorati Merkelapper:

En tenkte på “FBA og SQLServer: En kjærlighetshistorie

  1. David tidlig
    Beklager for postering denne relatert spørsmål, men jeg kunne ikke finne ut hvordan å sende deg en e-post fra denne bloggen.
    Du hadde et tidligere innlegg hvor du tilbys en flott måte å filtrere et bibliotek for å vise ukodede data. Har du noen tanker om hvordan du kan vise en liste over ukodede dokumenter i en hele dokumentbiblioteket? Bruke et tomt felt i Avansert søk returnerer ikke noen resultater.
    Svar

legg igjen et svar

e-postadressen din vil ikke offentliggjøres. Obligatoriske felt er merket *