Probléma: Az ASP.NET-alkalmazások „A rendszerleíró adatbázis kért hozzáférése nem engedélyezett” hibaüzenetet produkálnak, ha új eseményforrást próbálnak bejegyezni az eseménynaplóba

Fontos: Ebben a cikkben a rendszerleíró adatbázis módosításával kapcsolatos tudnivalók olvashatók. A rendszerleíró adatbázis módosítása előtt feltétlenül készítsen biztonsági másolatot arról, és csak akkor fogjon hozzá, ha tisztában van a rendszerleíró adatbázis visszaállításának módjával probléma esetén. A rendszerleíró adatbázis biztonsági mentéséről, visszaállításáról és módosításáról a Microsoft Tudásbázis alábbi cikkében tájékozódhat:
256986 A Microsoft Windows rendszerleíró adatbázisának ismertetése
A jelenség
Amikor az ASP.NET alkalmazással új eseményforrást próbál rögzíteni az eseménynaplóba, az alábbi hibaüzenet jelenhet meg:
System.Security.SecurityException: A rendszerleíró adatbázis kért hozzáférése nem engedélyezett.
Oka
Alapértelmezés szerint az ASP.NET munkafolyamat felhasználói tokenje ASPNET (az Internet Information Services (IIS) 6.0 programmal futó alkalmazások esetében NetworkService). „A jelenség” című részben ismertetett probléma előfordulásának oka az, hogy a fiók nem rendelkezik megfelelő felhasználói jogokkal eseményforrás létrehozásához.
A megoldás
Figyelem: A Rendszerleíróadatbázis-szerkesztő helytelen használata komoly problémákhoz vezethet, amelyek az operációs rendszer újratelepítését tehetik szükségessé. A Microsoft nem garantálja a Rendszerleíróadatbázis-szerkesztő nem megfelelő használata miatt fellépő problémák megoldhatóságát. A Rendszerleíróadatbázis-szerkesztőt csak saját felelősségére használhatja. A probléma megoldásához egy rendszergazdai jogokkal rendelkező felhasználónak már az ASP.NET webes alkalmazás futása előtt létre kell hoznia az eseményforrást. Eseményforrást az alábbi módszerekkel hozhat létre:

1. módszer:

Hozzon létre eseményforrást az Alkalmazás eseménynaplóban a Rendszerleíróadatbázis-szerkesztő segítségével. Ehhez hajtsa végre a következő lépéseket:
  1. Kattintson a Start menü Futtatás parancsára.
  2. A Megnyitás mezőbe írja be a következő parancsot: regedit.
  3. Keresse meg a következő rendszerleíró alkulcsot:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application
  4. Kattintson jobb gombbal az Application (Alkalmazás) alkulcsra, mutasson az Új pontra, majd kattintson a Kulcs parancsra.
  5. Írja be a TESZT kulcsnevet.
  6. Zárja be a Rendszerleíróadatbázis-szerkesztőt.

2. módszer:

A System.Diagnostics névtér EventLogInstaller osztálya lehetővé teszi, hogy telepítsen és beállítson egy olyan eseménynaplót, amelyet futása közben egy adott alkalmazás írásra és olvasásra használ. Létrehozhat eseményforrást az EventLogInstaller használatával is. Ehhez hajtsa végre a következő lépéseket:
  1. A Microsoft Visual Basic .NET vagy a Microsoft Visual C# .NET használatával hozzon létre egy EventLogSourceInstaller nevű, új osztálykönyvtárat. A program ilyenkor alapértelmezés szerint létrehozza a Class1.vb illetve a Class1.cs fájlt.
  2. A Solution Explorer segédprogramban kattintson jobb gombbal a EventLogSourceInstaller elemre, majd kattintson az Add References (Hivatkozások hozzáadása) gombra.
  3. Kattintson duplán az Add Reference (Hivatkozások hozzáadása) párbeszédpanel System.Configuration.Install.dll elemére, majd kattintson az OK gombra.
  4. Nevezze át a Class1.vb illetve Class1.cs fájlt saját_eseménynapló-telepítő.vb illetve saját_eseménynapló-telepítő.cs nevűre.
  5. A saját_eseménynapló-telepítő.vb illetve saját_eseménynapló-telepítő.cs fájlban található kódot cserélje a következő példakódra:

    Visual Basic .NET példa
    Imports System.DiagnosticsImports System.Configuration.InstallImports System.ComponentModel<RunInstaller(True)> _Public Class saját_eseménynapló-telepítő    Inherits Installer    Private saját_eseménynapló-telepítő As EventLogInstaller    Public Sub New()        ' Az EventLogInstaller új példányának létrehozása:        saját_eseménynapló-telepítő = New EventLogInstaller()        ' A létrehozandó eseménynapló forrásának beállítása:        saját_eseménynapló-telepítő.Source = "TESZT"        ' A forrás létrehozási naplójának beállítása:        saját_eseménynapló-telepítő.Log = "Application"        ' A saját_eseménynapló-telepítő hozzáadása a telepítőgyűjteményhez:        Installers.Add(saját_eseménynapló-telepítő)    End SubEnd Class
    Visual C# .NET példa
    using System;using System.Diagnostics;using System.ComponentModel;using System.Configuration.Install;namespace EventLogSourceInstaller {	[RunInstaller(true)]	public class MyEventLogInstaller : Installer	{		private EventLogInstaller saját_eseménynapló-telepítő;		public saját_eseménynapló-telepítő()		{			//Az EventLogInstaller példányának létrehozása:			saját_eseménynapló-telepítő = new EventLogInstaller();			// A létrehozandó eseménynapló forrásának beállítása:			saját_eseménynapló-telepítő.Source = "TESZT";			// A forrás létrehozási naplójának beállítása:			saját_eseménynapló-telepítő.Log = "Application";						// A saját_eseménynapló-telepítő hozzáadása a telepítőgyűjteményhez:			Installers.Add(saját_eseménynapló-telepítő);		}	}}
  6. Az EventLogSourceInstaller.dll létrehozásához kattintson a Build (Létrehozás) menü Build Solution (Megoldás létrehozása) parancsára.
  7. Nyissa meg a Visual Studio .NET parancssorát.
  8. A parancssorban váltson az EventLogSourceInstaller.dll fájlt tartalmazó mappára.
  9. Az eseményforrás létrehozásához futtassa a következő parancsot:
    InstallUtil EventLogSourceInstaller.dll
További információ

A jelenség ismételt előidézéséhez szükséges lépések

  1. A Visual Basic .NET vagy a Visual C# .NET használatával hozzon létre egy új ASP.NET webes alkalmazást. Alapértelmezés szerint a program ekkor létrehozza a WebForm1.aspx fájlt.
  2. A WebForm1.aspx HTML nézetében a meglévő kódot cserélje a következő példakódra:

    Visual Basic .NET példa
    <%@ Page Language="vb" AutoEventWireup="true" %><%@ Import namespace="System.Diagnostics" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML>	<script language="VB" runat="server">	Sub WriteEvent_Click(Src As Object, e As EventArgs)	Dim ev As New EventLog("Application")	' Esemény forrásának neve:	ev.Source = "TESZT" 		EventLog.CreateEventSource(ev.Source, "Application")	Try	 ev.WriteEntry(TextBox1.Text)	Catch b as exception	 Response.write ("WriteEntry " & b.message & "<br>")	End Try	ev = Nothing	End Sub	</script>	<body>		<form id="Form1" runat="server">			Event message: 			<asp:textbox id="TextBox1" runat="server" Width="233px"></asp:textbox>			<asp:button id="Button1" onclick="WriteEvent_Click" runat="server" NAME="Button1" text="Írás az eseménynaplóba"></asp:button>		</form>	</body></HTML>
    Visual C# .NET példa
    <%@ Page Language="c#" AutoEventWireup="true" %><%@ Import namespace="System.Diagnostics" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML>	<script language="C#" runat="server">	void WriteEvent_Click(Object Src, EventArgs e)	{	EventLog ev = new EventLog("Application");	// Esemény forrásának neve:	ev.Source = "TESZT";		EventLog.CreateEventSource(ev.Source, "Application");			try			{				ev.WriteEntry(TextBox1.Text);			}			catch (Exception b)			{				Response.Write("WriteEntry " + b.Message + "<br>");			}			ev = null;	}	</script>	<body>		<form id="Form1" runat="server">			Event message: 			<asp:textbox id="TextBox1" runat="server" Width="233px"></asp:textbox>			<asp:button id="Button1" onclick="WriteEvent_Click" runat="server" NAME="Button1" text="Írás az eseménynaplóba"></asp:button>		</form>	</body></HTML>
  3. A Debug (Hibakeresés) menüben kattintson a Start (Indítás) parancsra a WebForm1.aspx oldal böngészőben történő megtekintéséhez.
  4. Írjon be valamilyen szöveget a szövegmezőbe, majd kattintson az Írás az eseménynaplóba gombra.
  5. Ekkor megjelenik „A jelenség” szakaszban ismertetett hibaüzenet.
  6. A probléma megoldásához hozzon létre egy eseményforrás „A megoldás” szakaszban ismertetett módon, majd írja be a következő kódot a WebForm1.aspx fájlba:
    EventLog.CreateEventSource(ev.Source, "Application")
  7. Ismételje meg a 3. és a 4. lépést.
Tulajdonságok

Cikkazonosító: 329291 - Utolsó ellenőrzés: 12/04/2007 03:39:00 - Verziószám: 2.6

Microsoft ASP.NET 1.1, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft ASP.NET 1.0, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Internet Information Services 5.0, Microsoft Internet Information Services version 5.1, Microsoft Internet Information Services 6.0

  • kberrmsg kbwebforms kbsecurity kbprb KB329291
Visszajelzés