FBA şi SQL Server: O poveste de dragoste

Colegul meu a fost de lucru pe o parte de web într-un mediu FBA. Printre alte lucruri, partea web trage unele date la SQL server. Marele plan pentru acest proiect dictează că un DBA configurează securitatea la nivel de date în SQL (spre deosebire de a embedding un ID de utilizator într-o interogare SQL sau unele alte abordări).

Problema este că SQL server nu ştie nimic despre mediul nostru FBA, astfel încât ea nu poate avea încredere în noi. Am rezolvat această problemă prin, din lipsa unui cuvânt mai bun, manual pretinde un utilizator AD, astfel încât am putut conecta la SQL astfel încât SQL datele de nivel de securitate de lucrări.

Chiar dacă FBA este o caracteristică de ASP.NET, am SharePoint Nation oameni învăţaţi motoarele de căutare diferite care, în cazul în care o interogaţi pentru FBA, tu trebuie să însemne care doriţi ştiu cum să configuraţi FBA în SharePoint. Nu am reuşit să găsească găsi orice informaţii despre cum să activaţi un FBA orientate ASP.NET cerere pentru a comunica cu SQL în modul în care avem nevoie.

În cercetarea acest lucru, am re-citit acest articol: ASP.NET personificare

Mai mult de cercetare ne-a condus la acest articol codproject: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx

Care ne scrie codul nostru ajutat, care am inclus de mai jos. Nu este cel mai elegant chestii, dar a lucrat. Sper că vi se pare util.

Aici este codul care a lucrat pentru noi:

protejate void btnSearchCarrier_Click(obiect expeditor, EventArgs e)
 {
 încercaţi
 {
 ImpersonateUser UI = noi ImpersonateUser();
 // TODO: Înlocuiţi acreditările iU.Impersonate("Domeniului", "Utilizator", "Parola");

//
 COD
//

 iU.Undo();
 }
 prinde (Excepţie ex)
 {

 }
 }

// Folosind clasa personificare ca menţionate mai jos.

publice Clasa ImpersonateUser
 {
 [DllImport("advapi32.dll", SetLastError = adevărat)]
 publice statice extern bool LogonUser(
 Șir lpszUsername,
 Șir lpszDomain,
 Șir lpszPassword,
 int dwLogonType,
 int dwLogonProvider,
 Ref IntPtr phToken);

 [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
 privat extern statice bool CloseHandle(Mâner IntPtr);

 privat statice IntPtr tokenHandle = noi IntPtr(0);
 privat statice WindowsImpersonationContext impersonatedUser;

 // În cazul în care să includă acest cod într-un DLL, Asiguraţi-vă că să ceară că
 // se execută cu FullTrust.
 [PermissionSetAttribute(SecurityAction.Demand, Nume = "FullTrust")]
 publice nule personificare(şir domeniului, şir de utilizator, şir de parola)
 {
 încercaţi
 {

 // Funcţia negestionat LogonUser pentru a obţine simbolică pentru utilizator
 // utilizatorul specificat, domeniu, şi parola.
 const int LOGON32_PROVIDER_DEFAULT = 0;

 // Trece acest parametru determină LogonUser pentru a crea un simbol primar.
 const int LOGON32_LOGON_INTERACTIVE = 2;
 tokenHandle = IntPtr.Zero;

 // Pas -1 Sunaţi LogonUser pentru a obţine un mâner pentru un token de acces.
 bool returnValue = LogonUser(
 userName,
 Domeniului,
 parola,
 LOGON32_LOGON_INTERACTIVE,
 LOGON32_PROVIDER_DEFAULT,
 Ref tokenHandle); // tokenHandle - nou simbol de securitate

 Dacă (false == returnValue)
 {
 int ret = Marshal.GetLastWin32Error();
 Console.WriteLine("LogonUser apelul nu a reuşit cu codul de eroare : " +
 RET);
 arunca noi System.ComponentModel.Win32Exception(RET);
 }

 // Pas - 2
 WindowsIdentity newId = noi WindowsIdentity(tokenHandle);
 // Pas -3
 impersonatedUser = newId.Impersonate();

 }
 prinde (Excepţie ex)
 {
 Console.WriteLine("Excepţie a avut loc. " + ex.Mesaj);
 }
 }


 /// <Rezumat>
 /// Staţii de personificare
 /// </Rezumat>
 publice Anulare nule()
 {
 impersonatedUser.Undo();
 // Gratuit jetoanele.
 Dacă (tokenHandle != IntPtr.Zero)
 CloseHandle(tokenHandle);
 }
 }

</scop>

Aboneaza-te la blog-ul meu.

Technorati Tags:

Un gând pe „FBA şi SQL Server: O poveste de dragoste

  1. David devreme
    Ne pare rău pentru postarea asta întrebarea independenţi, dar ar putea nu dau seama cum de a trimite un email la acest blog.
    Ai avut un post anterior în cazul în care vă oferă o modalitate foarte bună de a filtra o bibliotecă pentru a vizualiza datele fără taguri. Aveţi orice gânduri cu privire la modul în care ar putea să Vezi o lista de taguri documente într-o bibliotecă de întregul document? Folosind un câmp gol în căutare avansată nu a returnat niciun rezultat.
    Răspuns

lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate *