Fehler beim Schreiben in das Windows-Ereignisprotokoll aus einer ASP.NET oder ASP-Anwendung

Dieser Artikel hilft Ihnen bei der Behebung des Problems, dass beim Schreiben in das Windows Ereignisprotokoll von einer asp-Anwendung (ASP.NET oder Anwendungsdienstanbieter) ein unerwarteter Fehler ausgelöst werden kann.

Ursprüngliche Produktversion:   Internetinformationsdienste 8.0 und höher
Ursprüngliche KB-Nummer:   2028427

Problembeschreibung

Sie haben eine ASP.NET oder ältere ASP-Anwendung, die auf Internetinformationsdienste (IIS) 8.0 oder höher ausgeführt wird. Die Anwendung protokolliert Ereignisse in den Windows-Ereignisprotokollen. Das Schreiben in die Ereignisprotokolle schlägt mit einer Fehlermeldung ähnlich dem folgenden Beispiel fehl:

ASP.NET-Anwendung

System.Security.SecurityException: Angeforderter Registrierungszugriff ist nicht zulässig.
System.ComponentModel.Win32Exception: Zugriff wird verweigert
InvalidOperationException: Protokoll für Quellanwendung kann nicht geöffnet werden. Möglicherweise haben Sie keinen Schreibzugriff.

Legacy-ASP-Anwendung

Berechtigung verweigert.

Ursache

Dieses Problem tritt auf, da das Benutzertoken der Anwendung standardmäßig aufgrund des eingeschränkten Sicherheitszugriffs nicht über die erforderlichen Benutzerrechte zum Schreiben in die Windows-Ereignisprotokolle verfügt.

Lösung

Wichtig

Dieser Abschnitt, diese Methode bzw. diese Aufgabe enthält eine Beschreibung der Schritte zum Bearbeiten der Registrierung. Durch die falsche Bearbeitung der Registrierung können schwerwiegende Probleme verursacht werden. Daher ist es wichtig, bei der Ausführung der folgenden Schritte sorgfältig vorzugehen. Für zusätzlichen Schutz sichern Sie die Registrierung, bevor Sie sie ändern. Sie können die Registrierung wiederherstellen, wenn ein Problem auftritt. Weitere Informationen zum Sichern und Wiederherstellen der Registrierung finden Sie unter Sichern und Wiederherstellen der Registrierung in Windows.

Um die erforderlichen Berechtigungen für die Threadidentität bereitzustellen, ändern Sie die Sicherheit des Ereignisprotokolls über die folgenden Registrierungsschlüssel auf dem Servercomputer. Sie sollten das Ereignisprotokoll auswählen, in das Ihre Anwendung schreibt:

  • HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Eventlog\Application\CustomSD
  • HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Eventlog\System\CustomSD

Der CustomSD Registrierungswert ist vom Typ REG_SZ und enthält einen Sicherheitsdeskriptor in der SDDL-Syntax (Security Descriptor Definition Language). Weitere Informationen zur SDDL-Syntax finden Sie unter den Links im Abschnitt "Weitere Informationen" weiter unten.

Hinweis

Zum Erstellen einer SDDL-Zeichenfolge gibt es drei unterschiedliche Rechte, die sich auf Ereignisprotokolle beziehen: Lesen, Schreiben und Löschen. Diese Rechte entsprechen den folgenden Bits im Feld "Zugriffsrechte" der ZEICHENFOLGE FÜR ASCII-kompatible Codierung (ACE):

  • 1 = Gelesen
  • 2 = Write
  • 4 = Klar

Wichtig

Sie können das Sicherheitsprotokoll auf die gleiche Weise konfigurieren. Sie können jedoch nur Lese- und Clear-Zugriffsberechtigungen ändern. Schreibzugriff auf das Sicherheitsprotokoll ist nur für die Windows lokalen Sicherheitsautorität (Local Security Authority, LSA) reserviert.

Das folgende Beispiel ist eine BEISPIEL-SDDL, die die Standard-SDDL-Zeichenfolge für das Anwendungsprotokoll anzeigt. Zugriffsberechtigungen (hexadezimal) sind fett formatiert:

O:BAG:SYD:(D;;0 xf0007;;; AN)(D;;0 xf0007;;; BG)(A;;0 xf0007;;; SY)(A;;0 x5;;; BA)(A;;0 x7;;; SO)(A;;0 x3;;;I U)(A;;0 x2;;; BA)(A;;0 x2;;; LS)(A;;0 x2;;; NS)

Eintrags bedeutungen:

  • O:BA Der Objektbesitzer ist ein integrierter Administrator (BA).
  • G:SY Primäre Gruppe ist System (SY).
  • D: Es handelt sich um eine freie Zugriffssteuerungsliste (DACL) anstelle eines Überwachungseintrags oder SACL.
  • (D;;0xf0007;;;AN) Verweigern Sie anonym (AN) den gesamten Zugriff. (1=Read + 2=Write + 4= Clear) (Erste ACE-Zeichenfolge in dieser SDDL).
  • (D;;0xf0007;;;BG) Verweigern Sie integrierten Gästen (BG) den gesamten Zugriff.
  • (A;;0xf0005;;;SY) Allow System Read and Clear (1=Read + 4=Clear), including DELETE, READ_CONTROL, WRITE_DAC, and WRITE_OWNER (indicated by the 0xf0000).
  • (A;;0x7;;;BA) Integriertes Lesen, SCHREIBEN und LÖSCHEN durch Administratoren zulassen.
  • (A;;0x7;;;SO) Zulassen von Lese-, SCHREIB- und CLEAR-Lesezugriff für Serveroperatoren.
  • (A;;0x3;;;IU) Interaktive Benutzer lese- und schreibzugriffen lassen.
  • (A;;0x3;;;SU) Allow Service accounts READ and WRITE.

Fügen Sie die richtige ACE-Zeichenfolge hinzu, damit Ihre Webseite auf die Ereignisprotokolle zugreifen kann. Wenn Ihre Webseite anonym ausgeführt wird (d. h. mithilfe der anonymen Authentifizierung in IIS), müssen Sie dem IUSR oder dem benutzerdefinierten anonymen Konto die richtigen Berechtigungen für diesen CustomSD Registrierungsschlüssel erteilen. Die Gruppe "Authentifizierte Benutzer" sollte über die erforderlichen Berechtigungen verfügen, wenn sie auf Windows-Integrated Authentifizierung ausgeführt wird.

Fügen Sie dazu den folgenden Eintrag an den Standardwert CustomSD unter dem ausgewählten Ereignisprotokoll an.

  • Für die Gruppe "Authentifizierte Benutzer" (wenn eine windowsintegrierte Authentifizierung vorhanden ist): (A;;0x0003;;;AU) Wobei AU = authentifizierte Benutzer.

  • For IUSR or the custom configured Anonymous account if there's an Anonymous Authentication, find the SID for that account and then create one, which looks like (A;;0x3;;;S-1-5-21-1985444312-785446638-2839930158-1121) where the last field is the SID for the IUSR account on my machine.

  • For Windows Authentication on IIS and ASP.NET impersonation turned on with a specific user account, find the SID for that impersonated account and then create an SDDL string, which looks like: (A;;0x3;;;S-1-5-21-1985444312-785446638-2839930158-1121) where the last field is the SID for the impersonated account.

Um Ihrer Gruppe Leseberechtigungen zu erteilen, fügen Sie dem CustomSD Wert am Ende der aktuellen Zeichenfolge Folgendes CustomSD hinzu:
(A;;0x1;;;[Your Group Name/user account SID])

Um Ihrer Gruppe Lese- und Schreibberechtigungen zu erteilen, fügen Sie dem CustomSD Wert am Ende der aktuellen Zeichenfolge Folgendes CustomSD hinzu:
(A;;0x3;;;[Your Group Name/user account SID])

Windows Server 2008

Wenn Sie den betreffenden Benutzern und Gruppen auf Windows 2008-Server Lesezugriff auf alle Ereignisprotokolle gewähren, können Sie sie einfach der integrierten Gruppe "Ereignisprotokollleser" hinzufügen. Wenn Sie jedoch nicht auf alle Ereignisprotokolle zugreifen möchten, müssen Sie dennoch auf die SDDL zurückgreifen, für die Sie das Hilfsprogramm verwenden WevtUtil können. Im folgenden Beispiel wird das Definieren des Zugriffs auf die Systemereignisanmeldung Windows 2008 Server veranschaulicht:

  1. Öffnen Sie die Eingabeaufforderung, und führen Sie den folgenden Befehl aus, um die SDDL für die Systemabmeldung in einer TXT-Datei zu sichern.

    wevtutil gl system > C:\temp\out.txt
    
  2. Öffnen Sie die Textdatei, und kopieren Sie den Eintrag channelAccess:

    channelAccess: O:BAG:SYD:(A;;0xf0007;;;SY)(A;;0x7;;;BA)(A;;0x5;;;SO)(A;;0x1;;;IU)(A;;0x1;;;AU)(A;;0x1;;;SU)(A;;0x1;;;S-1-5-3)(A;;0x2;;;LS)(A;;0x2;;;NS)(A;;0x2;;;S-1-5-33)
    
  3. Fügen Sie ihren Benutzer oder Ihre Gruppe zu dieser Zeichenfolge hinzu, und führen Sie den folgenden Befehl aus, um die neue SDDL anzuwenden. Ersetzen Sie O:BAG:XXXX durch ihre SDDL-Zeichenfolge, die Sie im vorherigen Schritt erstellt haben:

    wevtutil sl System /ca:O:BAG:XXXX
    

Hinweis

Nachdem Sie diesen Wert bearbeitet und den Computer neu gestartet haben, wird die neue Einstellung wirksam. Stellen Sie sicher, dass Sie SDDL und die Standardberechtigungen, die in jedem Ereignisprotokoll platziert werden, vollständig verstehen, bevor Sie dieses Verfahren verwenden. Achten Sie außerdem darauf, alle Änderungen sorgfältig zu testen, bevor Sie sie in einer Produktionsumgebung implementieren, da Sie versehentlich die Zugriffssteuerungslisten (Access Control Lists, ACLs) in einem Ereignisprotokoll so konfigurieren könnten, dass niemand darauf zugreifen kann.

Weitere Informationen