FBA und SqlServer: Eine Liebesgeschichte

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>

Onnieren Sie meinen Blog ab.

Technorati Tags:

Ein Gedanke zu "FBA und SqlServer: Eine Liebesgeschichte

  1. David früh
    Sorry für dieses posting könnte nicht verwandten Frage, aber ich nicht herausfinden, wie man senden Sie eine e-Mail aus diesem blog.
    Sie hatte eine frühere Post, wo Sie eine gute Möglichkeit, eine Bibliothek zum Anzeigen von ohne Tags Filtern angeboten. Haben Sie irgendwelche Gedanken darüber, wie Sie eine Liste von Dokumenten ohne Tags in einem gesamten Dokument-Bibliothek anzeigen könnte? Mit einem leeren Feld in Erweiterte Suche keine Ergebnisse zurück.
    Antwort

Hinterlasse eine Antwort

Deine Email-Adresse wird nicht veröffentlicht. erforderliche Felder sind markiert *