UnauthorizedAccessException

Hi,

ich knabbere jetzt seit Stunden an folgendem Problem: Ich habe eine ASP.NET-Anwendung auf einem Server laufen und möchte, dass diese auf ein Netzlaufwerk eines anderen Servers zugreifen kann. Dabei kommt immer folgende Fehlermeldung:

„System.UnauthorizedAccessException: Access to the path „\AndererServer\Netzlaufwerk\Test.txt“ is denied.“

Ich habe den Authentifizierungsmodus „Forms“ benutzt, jeder User muss sich mit seinem NT-Logon anmelden („LogonUser“ der „advapi32.dll“) und bekommt dann ein FormsAuthenticationTicket zugewiesen.

Impersonalisierung ist eingeschaltet. Im Web.config befinden sich also u.a. folgende Einträge:

Der Code, der auf das Laufwerk zugreifen will, sieht folgendermaßen aus:

TextReader reader = new StreamReader("\\AndererServer\Netzlaufwerk\Test.txt");

Zur Probe zeigt mir der Code
string user = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
an, dass die Server-Applikation tatsächlich unter meinem Login läuft.

Das Login, mit dem ich mich anmelde, hat Zugriff auf das gewünschten Netzlaufwerk. Als Test gebe ich im Browser meines Rechners ein:
\AndererServer\Netzlaufwerk\Test.txt
und die Datei öffnet sich.

Sorry für die vielen Infos, ich bin halt mit meinem Latein am Ende und weiß nicht, wo der Hund begraben liegt…

Ich hoffe, von euch kann mir jemand helfen.
Danke im Voraus und Gruß
Alexander

Hi,

[…]

Hi auch!

Obwohl ich mit der Rechteverwaltung unter ASP.NET nicht so richtig bekannt bin könnte es vielleicht an den Sicherheitseinstellungen von .NET auf diesem Rechner liegen.
Funktioniert es denn, wenn Du an der Stelle nicht auf eine Datei auf einem anderen Server, sondern in einem lokalen Verzeichnis zugreifst?
Dann ist das vermutlich das Problem und Du solltest über das .NET Framework ControlPanel die CAS überprüfen.

Soweit ich herausgefunden habe fallen bei .NET UNC-Pfade, wie bei Dir, immer in die Internet-Zone, was die Code-Sicherheit anbelangt, auch wenn der Zielrechner Teil des lokalen Netzes ist.
In diesem Fall hilft es auch, statt per UNC auf ein verbundenes Netzlaufwerk zuzugreifen.

Gruß,
Martin

Hi Martin, (bin der Poster dieses Threads)

Funktioniert es denn, wenn Du an der Stelle nicht auf eine
Datei auf einem anderen Server, sondern in einem lokalen
Verzeichnis zugreifst?
Dann ist das vermutlich das Problem und Du solltest über das
.NET Framework ControlPanel die CAS überprüfen.

Ja, das funktioniert leider, ist also nicht der Fehler. Dennoch: Was ist CAS?

Soweit ich herausgefunden habe fallen bei .NET UNC-Pfade, wie
bei Dir, immer in die Internet-Zone, was die Code-Sicherheit
anbelangt, auch wenn der Zielrechner Teil des lokalen Netzes
ist.
In diesem Fall hilft es auch, statt per UNC auf ein
verbundenes Netzlaufwerk zuzugreifen.

Das habe ich leider auch nicht verstanden. Könntest du das bitte nochmal erläutern (UNC == Universal Network Connection ??).

Vielen Dank und Gruß
Alexander

Hi Martin, (bin der Poster dieses Threads)

Funktioniert es denn, wenn Du an der Stelle nicht auf eine
Datei auf einem anderen Server, sondern in einem lokalen
Verzeichnis zugreifst?
Dann ist das vermutlich das Problem und Du solltest über das
.NET Framework ControlPanel die CAS überprüfen.

Ja, das funktioniert leider, ist also nicht der Fehler.
Dennoch: Was ist CAS?

CAS: Code Access Security. Einfach umschrieben: „Welcher .NET Code darf was?“
Einführung bei MSDN hier: http://msdn.microsoft.com/library/default.asp?url=/l…

Soweit ich herausgefunden habe fallen bei .NET UNC-Pfade, wie
bei Dir, immer in die Internet-Zone, was die Code-Sicherheit
anbelangt, auch wenn der Zielrechner Teil des lokalen Netzes
ist.
In diesem Fall hilft es auch, statt per UNC auf ein
verbundenes Netzlaufwerk zuzugreifen.

Das habe ich leider auch nicht verstanden. Könntest du das
bitte nochmal erläutern (UNC == Universal Network Connection
??).

Von Haus aus (also ohne Umkonfiguration) darf .NET Code, der von einem lokalen Datenträger ausgeführt wird, praktisch alles. Code, der aus der Intranet-Zone (also z.B. von einem Netzlaufwerk aus) ausgeführt wird, darf etwas weniger, bei manchen Aufrufen kann es zu solchen SecurityExceptions kommen.
Code, der aus der Internet-Zone (und damit auch z.B. von einem UNC-Pfad aus) ausgeführt wird, darf noch weniger, insbesondere nicht auf das lokale Dateisystem oder die Registry zugreifen, usw.

Vielen Dank und Gruß
Alexander

Hoffe, es ist jetzt etwas klarer und der Grund für Deine Probleme ist dort zu finden.

Gruß,
Martin

Salü Alex

Hat der ASP.NET User (ASPNET) Windows-Zugriffsrechte auf die Datei? Soweit ich weiss, laufen alle ASP.NET Requests unter diesem User.

Gruss
Andrea

Hallo Andrea,

nein, aber ich bin der Meinung, dass durch die Impersonalisierung der Request unter dem entsprechenden Account läuft, also meinem Account, welches die Zugriffsrechte hat…

Gruß
Alexander

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]