System.Security.SecurityException, wenn das virtuelle Verzeichnis auf eine Remotefreigabe in ASP.NET
Dieser Artikel hilft Ihnen, das Problem zu beheben, das System.Security.SecurityException ausgelöst werden kann, wenn Sie ein virtuelles Verzeichnis verwenden, das auf eine Remotefreigabe verweist, um eine Microsoft ASP.NET-basierte Anwendung zu hosten.
Ursprüngliche Produktversion: ASP.NET
Ursprüngliche KB-Nummer: 320268
Problembeschreibung
Wenn Sie ein virtuelles Verzeichnis verwenden, das auf eine Remotefreigabe verweist, um eine ASP.NET-basierte Anwendung zu hosten, wird möglicherweise eine Fehlermeldung angezeigt, die einem der folgenden Beispiele ähnelt:
Nachricht 1
Beschreibung der Sicherheitsausnahme: Die Anwendung hat versucht, einen Vorgang auszuführen, der von der Sicherheitsrichtlinie nicht zulässig ist. Wenden Sie sich an Ihren Systemadministrator, oder ändern Sie die Vertrauensebene der Anwendung in der Konfigurationsdatei, um dieser Anwendung die erforderliche Berechtigung zu erteilen.
Ausnahmedetails: System.Security.SecurityException: Sicherheitsfehler.
Quellfehler:
Zeile 30: private statisches Bool __intialized = false; Zeile 31: Zeile 32: öffentliche Global_asax() { Zeile 33: if ((ASP. Global_asax.__intialized == false)) { Zeile 34: ASP. Global_asax.__intialized = true;Nachricht 2
Serverfehler in /ApplicationName-Anwendung.
Parser-Fehlerbeschreibung: Während der Analyse einer Ressource, die für die Verarbeitung dieser Anforderung erforderlich ist, ist ein Fehler aufgetreten. Überprüfen Sie die folgenden spezifischen Analysefehlerdetails, und ändern Sie Ihre Quelldatei entsprechend.
Parser-Fehlermeldung: Typ "ApplicationName.Global" konnte nicht geladen werden.
Source Error: Line 1: <%@ Application Codebehind="Global.asax.cs" Inherits="ApplicationName.Global" %> Source File: Path of Application\global.asax Line: 1
Ursache
Auf System.Web den Namespace wird der Namespace nicht AllowPartiallyTrustedCallersAttribute angewendet. Weitere Informationen finden Sie unter Muster & Methoden.
Für code that isn't in the My_Computer_Zone code group that doesn't have this attribute requires the FullTrust user right. Die Remotefreigabe, die den Inhalt der Webanwendungen enthält, erfordert also FullTrust.
Lösung
Um dieses Verhalten zu beheben, gewähren Sie der Remotefreigabe das Recht "FullTrust":
Öffnen Sie auf dem Webserver die Verwaltungstools, und doppelklicken Sie dann auf Microsoft .NET Framework Configuration.
Erweitern Sie die Laufzeitsicherheitsrichtlinie, erweitern Sie Computer und dann Codegruppen.
Klicken Sie mit der rechten Maustaste auf All_Code, und wählen Sie "Neu" aus.
Select Create a new code group. Weisen Sie Ihrer Codegruppe einen relevanten Namen zu, z. B. den Namen der Anwendungsfreigabe. Wählen Sie Weiter aus.
Wählen Sie in der Liste "Bedingungstyp für diese Codegruppe auswählen" die URL aus.
Geben Sie im FELD "URL" den Pfad der Freigabe im folgenden Format ein:
file:////\\computername\\sharename\*Hinweis
Ersetzen Sie den Computernamen durch den Namen des Computers, auf dem die Remotefreigabe gehostet wird. Ersetzen Sie den Freigabenamen durch den Namen der Freigabe.
Wählen Sie Weiter aus. Wählen Sie auf der nächsten Seite "Vorhandenen Berechtigungssatz verwenden" und dann "Voll vertrauenswürdig" aus.
Wählen Sie "Weiter" und dann "Fertig stellen" aus.
Starten Sie Internetinformationsdienste (IIS) neu, um den ASP.NET Arbeitsprozess neu zu starten.
Wenn Microsoft .NET Framework Configuration nicht unter "Verwaltungstools" angezeigt wird, können Sie das .NET Framework Software Development Kit (SDK) installieren, um Microsoft .NET Framework-Konfiguration hinzuzufügen. Stattdessen können Sie den folgenden Befehl ausführen, um die Änderung vorzunehmen:
Drive :\WINDOWS\Microsoft.NET\Framework\v2.0.50727\caspol.exe -m -ag 1 -url "file:////\\computername\sharename\*" FullTrust -exclusive on
Führen Sie den folgenden Befehl aus, um weitere Informationen dazu zu erfahren, was diese Argumente tun:
caspol.exe -?
Status
Es handelt sich hierbei um ein beabsichtigtes Verhalten.
Weitere Informationen
In dieser Konfiguration muss das Konto, unter dem der ASP.NET Arbeitsprozess ausgeführt wird, über ausreichende Rechte für die Remotefreigabe verfügen. Sie können das Konto festlegen, unter dem der Arbeitsprozess ausgeführt wird, indem Sie das <processmodel> Tag in der datei Machine.config verwenden.
Schritte zum Reproduzieren des Verhaltens
- Erstellen Sie ein neues virtuelles Verzeichnis, das auf eine Remotefreigabe verweist.
- Erstellen Sie eine Anwendung für das virtuelle Verzeichnis. Stellen Sie sicher, dass der Benutzer, der eine Verbindung mit der Freigabe herstellt, Lesezugriff auf den Remoteinhalt hat.
- Ändern Sie im
<processmodel>Tag der Machine.config-Datei den Benutzer in einen Domänenbenutzer mit Listen-, Lese- und Ausführungsberechtigungen für die Remotefreigabe. - Erstellen Sie eine INLINE-ASPX-Datei, und fügen Sie die Datei in die Remotefreigabe ein.
- Stellen Sie eine Anforderung für die Seite.
References
Weitere Informationen zu den Berechtigungen, die das ASPNET-Konto zum Ausführen ASP.NET Anwendungen benötigt, finden Sie unter "Einführung in ASP.NET Identität". Weitere Informationen zur sicherheit ASP.NET finden Sie unter INFO: ASP.NET Security Overview.