Mein Kollege hat ein Webpart in einer FBA-Umgebung arbeiten. Unter anderem, das Webpart zieht einige Daten aus SQLServer. Der großen Plan für dieses Projekt vorschreibt, dass ein DBA in SQL Daten Sicherheitsstufe konfiguriert (im Gegensatz zum Einbetten einer Benutzer-ID in einer SQL-Abfrage oder einige andere Ansatz).
Das Problem ist, dass SQLServer nicht weiß nichts über unsere FBA-Umgebung so dass es uns nicht vertrauen können. Wir lösen dieses Problem durch, in Ermangelung eines besseren Wortes, manuell imitieren einen AD-Benutzer, so dass wir eine Verbindung zu SQL, konnte so dass SQL-Daten-Sicherheit-Stufe.
Obwohl FBA ein ASP.NET-Feature ist, Wir SharePoint Nation Menschen gelehrt haben, die verschiedenen Suchmaschinen Wenn Sie FBA Abfragen sind, Sie müssen bedeuten, dass Sie wollen wissen, wie man FBA in SharePoint konfigurieren. Ich konnte nicht finden, finden Sie alle Informationen zum Aktivieren eines FBA orientierte ASP.NET Anwendung mit SQL in der Weise kommunizieren wir brauchten.
Im Zuge der Erforschung dieses, Wir haben wieder diese Artikel lesen: ASP.NET Identitätswechsel
Mehr Forschung führte uns zu diesem Artikel codproject: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx
Das half uns unser Code schreiben, die ich unten aufgeführt habe. Es ist nicht das eleganteste Zeug, aber es hat funktioniert. Ich hoffe, dass Sie es hilfreich.
Hier ist der Code, der für uns gearbeitet:
geschützt void btnSearchCarrier_Click(Objekt-Absender, EventArgse) { versuchen { ImpersonateUser iU = Neu ImpersonateUser(); // TODO: Ersetzen Sie Anmeldeinformationen iU.Impersonate("DomainName", "UserName", "Passwort"); // CODE // iU.Undo(); } fangen (Exception ex) { } } // Verwendung von Identitätswechsel-Klasse, wie unten erwähnt. öffentliche Klasse ImpersonateUser { [DllImport("advapi32.dll", SetLastError = wahr)] öffentliche statische Ext. Bool LogonUser( Zeichenfolge lpszUsername, Zeichenfolge lpszDomain, Zeichenfolge lpszPassword, Int dwLogonType, Int dwLogonProvider, Ref IntPtr-phToken); [DllImport("kernel32.dll", CharSet = CharSet.Auto)] Privat Ext. statische Bool CloseHandle(IntPtr handle); Privat statische IntPtr-TokenHandle = Neu IntPtr(0); Privat statische WindowsImpersonationContext impersonatedUser; // Wenn Sie diesen Code in eine DLL einbinden, Achten Sie darauf, daß es verlangen // läuft mit FullTrust. [PermissionSetAttribute(SecurityAction.Demand, Name = "FullTrust")] öffentliche privatevoid Impersonate(Zeichenfolge-domainName, Zeichenfolge Benutzernamen, Zeichenfolge-Passwort) { versuchen { // Verwenden Sie die nicht verwaltete Funktion LogonUser, um Benutzer für token erhalten // der angegebene Benutzer, Domäne, und Passwort. const Int LOGON32_PROVIDER_DEFAULT = 0; // Übergabe dieser Parameter bewirkt, dass LogonUser ein primäres Token erstellen. const Int LOGON32_LOGON_INTERACTIVE = 2; TokenHandle = IntPtr.Zero; // Schritt -1 Rufen Sie LogonUser erhalten Sie einen Handle für ein Zugriffstoken auf. Bool ReturnValue = LogonUser( Benutzername, domainName, Passwort, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, Ref tokenHandle); // tokenHandle - neue Sicherheits-token If (false == ReturnValue) { Int ret = GetLastWin32Error(); Console.WriteLine("LogonUser-Aufruf ist fehlgeschlagen mit Fehlercode : " + Ret); werfen neue System.ComponentModel.Win32Exception(Ret); } // Schritt - 2 WindowsIdentity NewId = Neu WindowsIdentity(tokenHandle); // Schritt -3 ImpersonatedUser = newId.Impersonate(); } fangen (Exception ex) { Console.WriteLine("Ausnahme ist aufgetreten. " + Ex.Nachricht); } } /// <Zusammenfassung> /// Haltestellen Identitätswechsel /// </Zusammenfassung> öffentliche void rückgängig() { impersonatedUser.Undo(); // Die Token gratis. If (tokenHandle != IntPtr.Zero) CloseHandle(tokenHandle); } }
</Ende>