Paryżu w rodzinie Żydowskiej i programu SQL Server: Love Story

Mój kolega pracuje na część sieci web w środowisku FBA. Wśród innych rzeczy, składnik web part ściąga jakieś dane z programu SQL server. Wielki plan dla tego projektu dyktuje, że DBA konfiguruje poziom bezpieczeństwa danych w SQL (w przeciwieństwie do osadzania identyfikator użytkownika w kwerendzie SQL lub inne podejścia).

Problemem jest to, że SQL server nie wie nic o nasze środowisko FBA, więc to nie można nam zaufać. Rozwiązaliśmy ten problem przez, powodu braku lepszego programu word, ręcznie personifikacji użytkownika reklamy tak, że możemy podłączyć do SQL takie, że danych SQL poziom zabezpieczeń działa.

Mimo że Paryżu w rodzinie Żydowskiej jest funkcją programu ASP.NET, we people SharePoint Nation nauczyli wyszukiwania różnych silników, że jeśli kwerendą w Paryżu w rodzinie Żydowskiej, to znaczy, że chcesz wiedzieć, jak skonfigurować FBA w SharePoint. Nie udało mi się znaleźć znaleźć wszelkie informacje na temat włączania FBA zorientowanych aplikacji ASP.NET do komunikowania się z SQL w sposób potrzebowaliśmy.

W trakcie badań to, możemy czytać ponownie książkę niniejszego artykułu: Personifikacja w programie ASP.NET

Więcej badań doprowadziło nas do tego artykułu codproject: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx

Który pomógł nam napisać naszego kodu, który podaję poniżej. Nie jest to najbardziej eleganckie rzeczy, ale to działało. Mam nadzieję, że okaże się pomocne.

Oto kod, który pracował dla nas:

chronione void btnSearchCarrier_Click(obiekt nadawcy, E elementu EventArgs)
 {
 Spróbuj
 {
 ImpersonateUser iU = Nowy ImpersonateUser();
 // TODO: Zastąpić iU.Impersonate poświadczenia("NazwaDomeny", "Nazwa użytkownika", "Hasło");

//
 KOD
//

 iU.Undo();
 }
 połów (Wyjątek ex)
 {

 }
 }

// Przy użyciu personifikacji klasy określone poniżej.

publiczne Klasa ImpersonateUser
 {
 [DllImport("advapi32.dll", SetLastError = PRAWDA)]
 publiczne statyczne zewnętrzny bool LogonUser(
 Ciąg lpszUsername,
 Ciąg lpszDomain,
 Ciąg lpszPassword,
 int dwLogonType,
 int dwLogonProvider,
 ref IntPtr phToken);

 [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
 prywatne zewnętrzny statyczne bool CloseHandle(IntPtr uchwyt);

 prywatne statyczne IntPtr tokenHandle = Nowy IntPtr(0);
 prywatne statyczne WindowsImpersonationContext impersonatedUser;

 // Jeśli możesz włączyć ten kod do biblioteki DLL, Upewnij się, że żądanie to
 // działa z FullTrust.
 [PermissionSetAttribute(SecurityAction.Demand, Nazwa = "FullTrust")]
 publiczne Personifikuj nieważne(ciąg NazwaDomeny, ciąg nazwy użytkownika, ciąg hasła)
 {
 Spróbuj
 {

 // Użyj funkcji LogonUser niezarządzanych aby uzyskać tokenu dla użytkownika
 // określony użytkownik, domena, i hasło.
 const int LOGON32_PROVIDER_DEFAULT = 0;

 // Przekazując ten parametr powoduje LogonUser utworzyć token podstawowy.
 const int LOGON32_LOGON_INTERACTIVE = 2;
 tokenHandle = Argumentu IntPtr.Zero;

 // Krok -1 Zadzwonić wykonywanie funkcji LogonUser Aby uzyskać dojście do tokenu dostępu.
 bool returnValue = wykonywanie funkcji LogonUser(
 Nazwa użytkownika,
 nazwa_domeny,
 hasło,
 LOGON32_LOGON_INTERACTIVE,
 LOGON32_PROVIDER_DEFAULT,
 REF tokenHandle); // tokenHandle - nowego tokenu zabezpieczeń

 Jeśli (FAŁSZ == returnValue)
 {
 int ret = Marshal.GetLastWin32Error();
 Console.WriteLine("Wykonywanie funkcji LogonUser wywołanie nie powiodło się zwracając kod błędu : " +
 RET);
 rzut nowe System.ComponentModel.Win32Exception(RET);
 }

 // Krok - 2
 WindowsIdentity newId = Nowy WindowsIdentity(tokenHandle);
 // Krok -3
 impersonatedUser = newId.Impersonate();

 }
 połów (Wyjątek ex)
 {
 Console.WriteLine("Wystąpił wyjątek. " + ex.Komunikat);
 }
 }


 /// <Podsumowanie>
 /// Zatrzymuje personifikacji
 /// </Podsumowanie>
 publiczne Cofnij nieważne()
 {
 impersonatedUser.Undo();
 // Wolne tokenów.
 Jeśli (tokenHandle != Argumentu IntPtr.Zero)
 Funkcji CloseHandle:(tokenHandle);
 }
 }

</koniec>

Subskrybowanie mój blog.

Technorati znaczniki:

Jedna myśl na "Paryżu w rodzinie Żydowskiej i programu SQL Server: Love Story

  1. David wcześnie
    Przepraszamy za księgowania to pytanie niepowiązanych ale może nie rysunek się, jak wysłać wiadomość e-mail z tym blogu.
    Miałeś poprzedni post, gdzie oferowane świetny sposób do biblioteki, aby wyświetlić bez znaczników danych do filtrowania. Masz jakieś przemyślenia, jak może wyświetlić listę nieoznakowanego dokumentu w bibliotece dokumentów cały? Za pomocą puste pole w zaawansowane wyszukiwanie nie zwraca żadnych wyników.

Odpowiedz

Twoj adres e-mail nie bedzie opublikowany. wymagane pola są zaznaczone *