2009-06-18 6 views
1

Ich habe eine asp.net app (Windows-Authentifizierung für den Zugriff verwendet), die (durch das Sicherheitsteam festgelegt) muss eine Verbindung zu einem Remote SQL Server 2005 mit integrierter Sicherheit herstellen .Da der Tatsache, dass es mir Remote-SQL-Server benötigen ein benutzerdefiniertes Konto (imitiert den ursprünglichen Anrufer arbeiten würde nicht) zum imitieren über:ASP.NET Web App kann nicht mehrere Identitätswechsel für Authentifizierung verwenden

<identity impersonate = "true" userName="domainname\user" password="password" /> 

Diese workes in Ordnung. Der Haken ist, dass meine App auch eine Verbindung zu einem SSRS-Server herstellt, um mit dem ReportViewer-Steuerelement Berichte zu erstellen. Der Berichtsserver befindet sich auf einem separaten Server und das Sicherheitsteam schreibt vor, dass alle Aufrufe dieses Servers das Konto des ursprünglichen Fensters für Überwachungszwecke verwenden müssen. Es scheint, dass meine einzige Option war, zu versuchen, meine App in Ordnern zu trennen und ein "Standort" -Tag in meiner web.config zu verwenden und separate Identitätstags zu verwenden. Wie zum Beispiel:

Hinweis: Kein Benutzername und Passwort angegeben, was bedeutet, dass es den ursprünglichen Anrufer imitieren sollte.

Um die Sache noch komplizierter zu machen, ist meine App eine Masterpage/Content Page App. Die Masterseite ruft Aufrufe von SQL auf, um Menüs und ähnliches aufzufüllen. Unterste Zeile ist die doppelte Identitätswechsel-Spur funktioniert nicht. Ich bin bereit, meine Hände hochzuwerfen und zu erklären, dass dies nicht möglich ist. Wenn es einen Weg gäbe, wo ich die App den ursprünglichen Anrufer annehmen lassen könnte, der meine SSRS Auditing-Bedürfnisse befriedigen würde, stellen Sie Verbindungen zum SQL Server als das benutzerdefinierte Domänenkonto her. Ich kann SQL-Authentifizierung nicht verwenden: nicht erlaubt, obwohl das das Problem lösen würde.

Antwort

0

Sie sollten den Identitätswechsel aktivieren und deaktivieren können, damit Sie das Standardkonto verwenden können, auf dem die Site ausgeführt wird. Ich werde nachsehen müssen, es ist schon eine Weile her, seit ich es gemacht habe.

Das sieht wie ein Anfang, wie es zu tun:

System.Security.Principal.WindowsImpersonationContext impersonationContext; 
impersonationContext = 
    ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate(); 

//Insert your code that runs under the security context of the authenticating user here. 

impersonationContext.Undo(); 

Im Wesentlichen imitieren Sie nur die entsprechenden Benutzer für die Anrufe, die Sie brauchen, und „Rückgängig“ den Kontext dann und schalten Sie es aus. Es geht danach auf den Standardbenutzer zurück. Hier

ist ein Link zu der Windows-Identität Klasse:

http://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity.aspx

+0

Als ich den Identitätswechsels für einen benutzerdefinierten Benutzer wie Set: die Windows-Identität ist der individuelle Benutzer. Ich habe es versucht und es ist eine Tatsache. Wenn ich also standardmäßig den ursprünglichen Benutzer mit verwende, wie gebe ich den benutzerdefinierten Benutzer für meine DB-Aufrufe an? – MikeD

+0

Wenn Speicher mir richtig dient, sollte es automatisch tun, vorausgesetzt, die Verbindungszeichenfolge verwendet den Kontext von sspi. – kemiller2002

1

Haben Sie das folgende Setup versucht:

  1. Set Identitätswechsel auf true. Dies ist für die Authentifizierung in der Anwendung und für den Zugriff auf die SSRS zur Verwendung des aktuellen angemeldeten Benutzers erforderlich.

  2. Verwenden Sie eine Verbindungszeichenfolge für SSRS, für die die integrierte Sicherheit auf "true" festgelegt ist, sodass der imitierte Benutzer direkt weitergeleitet wird.

  3. Verwenden Sie eine zweite Verbindungszeichenfolge, wobei der benutzerdefinierte Benutzername und das Kennwort in der Verbindungszeichenfolge fest codiert sind. Sie können den Abschnitt für die Verbindungszeichenfolge von web.config so verschlüsseln, dass er für menschliche Augen nicht sichtbar ist, aber das Framework entschlüsselt dies automatisch beim Erstellen einer Verbindung.

Ich habe eine ähnliche Situation (ein bestimmtes Konto müssen bestimmte Daten abzurufen, aber die allgemeine Identitätswechsel für den Rest der Service-Funktionalität) und dieses Setup funktioniert.

EDIT: Die allgemeine Syntax für Ihre web.config von der Eingabeaufforderung Verschlüsselung ist:

aspnet_regiis -pef "connectionStrings" [PhysicalPathToApplication] -prov "DataProtectionConfigurationProvider" 

Verschlüsselung auf einer Maschine pro Maschine Basis durchgeführt wird, so wird die Verschlüsselung auf dem bestimmten Server zu tun hat . Sie können bei Bedarf weitere Dokumentation abrufen.

+0

Wenn ich keine SQL-Authentifizierung verwende, kann ich den Benutzer und das Kennwort nicht fest in die Verbindungszeichenfolge codieren. Kann ich? Unsere DBA bestehen darauf, dass wir integrierte Sicherheit = SSPI verwenden. – MikeD

+0

Richtig, wenn sie nicht bereit sind, ein spezifisches SQL-Authentifizierungskonto zu erstellen, um Ihre Anforderungen zu erfüllen, dann müssen Sie sich einige heikle Identitätswechsel-Situationen für die verschiedenen Situationen ansehen. –