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

A cikk fordítása A cikk fordítása
Cikk azonosítója: 329291 - A cikkben érintett termékek listájának megtekintése.
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
Az összes kibontása | Az összes összecsukása

A lap tartalma

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.Diagnostics
    Imports System.Configuration.Install
    Imports 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 Sub
    End 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.

Hivatkozások

A Microsoft kapcsolódó webhelyei:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbwlkWalkthroughCreatingEventLogInstallers.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdiagnosticseventlogclasstopic.asp

Tulajdonságok

Cikk azonosítója: 329291 - Utolsó ellenőrzés: 2007. december 4. - Verziószám: 2.6
A cikkben található információ a következő(k)re vonatkozik:
  • 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
Kulcsszavak: 
kberrmsg kbwebforms kbsecurity kbprb KB329291
A Microsoft tudásbázisban szolgáltatott információkat "az adott állapotban", bárminemű szavatosság vagy garancia nélkül biztosítjuk. A Microsoft kizár mindennemű, akár kifejezett, akár vélelmezett szavatosságot vagy garanciát, ideértve a forgalomképességre és az adott célra való alkalmasságra vonatkozó szavatosságot is. A Microsoft Corporation és annak beszállítói semmilyen körülmények között nem felelősek semminemű kárért, így a közvetlen, a közvetett, az üzleti haszon elmaradásából származó vagy speciális károkért, illetve a kár következményeként felmerülő költségek megtérítéséért, még abban az esetben sem, ha a Microsoft Corporationt vagy beszállítóit az ilyen károk bekövetkeztének lehetőségére figyelmeztették. Egyes államok joga nem teszi lehetővé bizonyos károkért a felelősség kizárását vagy korlátozását, ezért a fenti korlátozások az ön esetében esetleg nem alkalmazhatók.

Visszajelzés küldése

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com