Système.Sécurité.SecurityException lors de l'écriture dans le journal des événements

je travaille sur le port d'un ASP.NET app from Server 2003 (and IIS6) to Server 2008 (IIS7).

quand j'essaie de visiter la page sur le navigateur je reçois ceci:

erreur de serveur dans L'Application‘/’.

Exception Relative À La Sécurité

Description: L'application a tenté d'effectuer une opération non autorisée par la politique de sécurité. Pour bénéficier de cette application nécessaires permission veuillez communiquer avec votre administrateur système ou modifier le niveau de confiance de l'application dans le fichier de configuration.

Détails De L'Exception: Système.Sécurité.SecurityException: la source n'a pas été trouvée, mais certains ou tous les journaux d'événements n'ont pas pu être recherchés. Journaux inaccessibles: sécurité

Source D'Erreur:

une exception non manipulée a été générée lors de l'exécution de la requête web actuelle. Les informations concernant les l'origine et l'emplacement de l'exception peuvent être identifiés en utilisant la trace de la pile d'exception ci-dessous.

Trace De La Pile:

[SecurityException: La source n'a pas été trouvé, mais certains ou tous les journaux des événements n'a pas pu être fouillés. Journaux inaccessibles: sécurité.]

Système

.Diagnostic.Le journal des événements.FindSourceRegistration (String source, String machineName, Boolean readOnly) +562 Système.Diagnostic.Le journal des événements.SourceExists (String source), Chaîne machineName) +251

[snip]

voilà ce que j'ai fait pour essayer de le résoudre:

  1. donnez à "tout le monde" l'autorisation d'accès complet à la clé HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventLogSecurity . Cela a fonctionné. Mais naturellement, Je ne peux pas faire ça en production. J'ai donc supprimé la permission" tout le monde " après avoir lancé l'application pendant quelques minutes et l'erreur est réapparue.

  2. I j'ai créé la source dans le journal D'Application et le journal de sécurité (et j'ai vérifié qu'elle existe via regedit) pendant l'installation avec des permissions élevées, mais l'erreur est restée.

  3. j'ai donné à l'app un niveau de confiance complet dans le fichier web.config (et en utilisant appcmd.exe ) mais en vain.

est-ce que quelqu'un a une idée de ce qui pourrait être fait ici?

PS: il s'agit d'une suite à cette question . J'ai suivi les réponses données, mais en vain (voir #2 ci-dessus).

176
demandé sur Community 2009-08-13 23:15:50

22 réponses

pour donner Network Service lire la permission sur la touche EventLog/Security (comme suggéré par Firenzi et royrules22) suivre les instructions de http://geekswithblogs.net/timh/archive/2005/10/05/56029.aspx

  1. ouvrir le registre Editor:
    1. sélectionner Start puis Run
    2. inscrivez regedt32 ou regedit
  2. naviguer/étendre à la touche suivante:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Security

  3. cliquez sur le bouton droit de la souris sur cette entrée et sélectionnez Autorisations

  4. ajouter le Network Service utilisateur

  5. Donnez-lui la permission de Lecture

mise à jour: les étapes ci-dessus sont ok sur les machines de développement, lorsque vous n'utilisez pas le processus de déploiement pour installer l'application.

Cependant, si vous déployez votre application sur d'autres Machines, pensez à enregistrer les sources du journal d'événements pendant l'installation comme suggéré dans SailAvid et réponses de Nicole Calinoiu .

j'utilise la fonction PowerShell (appel à Octopus Deploy.ps1)

function Create-EventSources() {
    $eventSources = @("MySource1","MySource2" )
    foreach ($source in $eventSources) {
            if ([System.Diagnostics.EventLog]::SourceExists($source) -eq $false) {
                [System.Diagnostics.EventLog]::CreateEventSource($source, "Application")
            }
    }
}
165
répondu Michael Freidgeim 2017-05-23 12:02:53

le problème est que le EventLog.SourceExists essaie d'accéder à la clé EventLog\Security , accès qui n'est autorisé que pour un administrateur.

un exemple courant pour un programme C # qui se connecte à EventLog est:

string sSource;
string sLog;
string sEvent;

sSource = "dotNET Sample App";
sLog = "Application";
sEvent = "Sample Event";

if (!EventLog.SourceExists(sSource))
    EventLog.CreateEventSource(sSource, sLog);

EventLog.WriteEntry(sSource, sEvent);
EventLog.WriteEntry(sSource, sEvent, EventLogEntryType.Warning, 234);

cependant, les lignes suivantes échouent si le programme n'a pas les permissions d'administrateur et la clé n'est pas trouvée sous EventLog\Application comme EventLog.SourceExists essaiera alors d'accéder à EventLog\Security .

if (!EventLog.SourceExists(sSource))
    EventLog.CreateEventSource(sSource, sLog);

par conséquent, il est recommandé de créer un script d'installation, qui crée la clé correspondante, à savoir:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\dotNET Sample App

On peut alors supprimer ces deux lignes.

vous pouvez également créer un fichier .reg pour créer la clé de registre. Il suffit de sauvegarder le texte suivant dans un fichier create.reg :

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\dotNET Sample App]
50
répondu SailAvid 2016-06-06 10:40:39

la solution était de donner au compte" Network Service " l'autorisation de lire sur la clé Event Log/Security.

44
répondu encee 2016-06-22 18:34:14

Pour moi ony octroi de "Lire" les autorisations pour 'service réseau' l'ensemble du 'Journal' branche travaillé.

8
répondu evictorov 2009-12-03 12:22:16

j'ai eu un problème très similaire avec un programme de console que j'ai développé sous VS2010 (mis à jour à partir de VS2008 sous XP) Mon programme utilise EnLib pour faire de la journalisation. L'erreur a été déclenchée parce que EntLib n'avait pas la permission d'enregistrer une nouvelle source d'événement.

donc j'ai commencé une fois mon prog compilé en tant qu'administrateur : il a enregistré la source de l'événement. Puis je suis retourné développer et déboguer de L'intérieur VS sans problème.

(vous peut également se référer à http://www.blackwasp.co.uk/EventLog_3.aspx , il m'a aidé

7
répondu oldbrazil 2011-10-18 17:02:08

j'essaie presque tout ici pour résoudre ce problème... Je partage ici la réponse qui m'aide:

une Autre façon de résoudre le problème :

  • dans la console IIS, allez à Application pool qui gère votre site, et notez l'identité qui l'exécute (habituellement le service réseau)
  • assurez-vous que cette identité peut lire KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog (rigth-click, autorisations)
  • maintenant changer l'identité de ce pool d'applications au système Local, Appliquer ,et revenir au service de réseau

informations d'Identification sera rechargé et EventLog reacheable

in http://geekswithblogs.net/timh/archive/2005/10/05/56029.aspx , merci Michael Freidgeim

6
répondu Gelásio 2012-01-30 16:41:54

cette exception se produisait pour moi à partir d'une application .net console fonctionnant comme une tâche programmée, et j'essayais de faire essentiellement la même chose - créer une nouvelle Source D'événement et écrire dans le journal d'événements.

à la fin, le réglage des permissions complètes pour l'utilisateur sous lequel la tâche était en cours d'exécution sur les touches suivantes a fait le tour pour moi:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Security
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog
5
répondu tswann 2011-12-15 16:20:39

j'ai rencontré le MÊME PROBLÈME, MAIS j'ai dû monter d'un niveau et donner un accès complet à tout le monde à la HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\ key, au lieu de descendre à la sécurité, qui a éclairci le problème pour moi.

4
répondu nodonoghue 2011-05-25 21:14:35

même problème sur Windows 7 64bits. Exécuter en tant qu'administrateur résolu le problème.

3
répondu Dom 2011-06-08 15:40:00

pour info ... mon problème était que accidentellement sélectionné " service Local "comme le compte sur les propriétés du ProcessInstaller au lieu de"système Local". Il suffit de mentionner pour tous ceux qui ont suivi le tutoriel MSDN comme le montre d'abord la sélection du service Local et je n'ai pas été très attentif....

3
répondu DaleS 2012-02-08 21:54:23

une nouvelle clé avec le nom de la source utilisée doit être créée sous HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application dans regEdit lorsque vous utilisez le système .Diagnostic.Le journal des événements.WriteEntry ("SourceName"," ErrorMessage", EventLogEntryType.Erreur);

Donc, fondamentalement, votre utilisateur n'a pas l'autorisation de créer la clé. Le pouvez effectuer les opérations suivantes en fonction de l'utilisateur que vous utilisez à partir de la valeur d'Identité dans l'Application Piscine paramètres Avancés:

  1. Run RegEdit and go to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog
  2. clic droit sur la touche EventLog et les Permissions select... option 3.Ajoutez votre utilisateur avec un accès de contrôle complet.

    - si vous utilisez "NetworkService" ajouter un utilisateur de service réseau

    - si vous êtes usinf "ApplicationPoolIdentity " ajouter IIS APPPOL{nom de votre pool d'applications} (Utilisez l'emplacement de la machine locale lors de la recherche de l'utilisateur).

    - si vous utilisez " LocalSystem " assurez-vous que l'Utilisateur a les permissions D'administrateur. Il n'est pas recommandé pour les vulnérabilités.

  3. répétez les étapes de 1 à 3 pour HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Security

pour déboguer avec Visual Studio j'utilise "NetworkService" (il est ASP.NET utilisateur) et lorsque le site est publié, j'ai utilisé "AppicationPoolIdentity".

3
répondu Pablishe 2016-07-07 15:41:26

Je ne travaille pas sur IIS, mais j'ai une application qui envoie la même erreur sur une boite 2K8. Ça marche très bien sur une boîte de 2K3, allez comprendre.

ma résolution était de "courir en tant qu'administrateur" pour donner à l'application des droits élevés et tout fonctionne heureusement. J'espère que cela vous aidera à prendre la bonne direction.

Windows 2008 est droits/permissions/élévation est vraiment différent de Windows 2003, gar.

2
répondu thomasnguyencom 2009-08-20 17:10:42

Salut j'ai rencontré le même problème quand je développais une application et que je voulais l'installer sur un PC distant, Je l'ai corrigé en faisant ce qui suit:

1) Allez dans votre registre, localisez: HKLM\System\CurrentControlSet\Services\EventLog\Application (???Votre NOM_SERVICE_OR_APP_NAME???)

notez que "(???Votre NOM_SERVICE_OR_APP_NAME???) "est le nom de votre service d'application tel que vous l'avez défini lorsque vous avez créé votre déploiement. net, par exemple, si vous avez nommé votre nouvelle application "Ma nouvelle application" alors la clé serait: HKLM\System\CurrentControlSet\Services\EventLog\Application\Ma nouvelle application

Note2: selon l'événement dans lequel vous écrivez, vous pouvez trouver sur votre DEV box, \Application\ (comme indiqué ci-dessus), ou aussi (\System) ou (\Security) selon l'événement dans lequel votre application écrit, la plupart du temps, (\Application) devrait être amende toutes les fois.

2) être sur la touche ci-dessus, à partir du menu; sélectionnez "FICHIER" -> "Exporter", puis enregistrez le fichier. (Note: cela créerait vos paramètres de Registre nécessaires lorsque l'application aurait besoin d'accéder à cette clé pour écrire dans le visualiseur D'événement), le nouveau fichier sera a.Fichier REG, pour l'argument du saké, de l'appeler "Ma Nouvelle Application.REG "

3) lors d'un déploiement en PRODuction, consulter l'administrateur du système du serveur (SA), remettre la" ma nouvelle application.REG " déposer avec la demande, et de demander à L'as d'installer ce fichier REG, une fois fait (comme admin) cela créerait la clé pour votre application.

4) exécutez votre application, il ne devrait pas avoir besoin d'accéder à autre chose que cette clé.

Le problème

devrait être résolu maintenant.

Cause:

lors du développement D'une application qui écrit n'importe quoi dans L'EventLog, il faudrait une clé pour elle sous le Registre D'Eventlog si cette clé n'est pas trouvée, il essaierait de la créer, qui échoue alors pour ayant pas les autorisations pour le faire. Le processus ci-dessus, est similaire au déploiement d'une application (manuellement) alors que nous le créons nous-mêmes, et pas besoin d'avoir un mal de tête puisque vous ne modifiez pas le registre en ajoutant des permissions à tout le monde ce qui est un risque de sécurité sur les serveurs de production.

j'espère que cela aidera à le résoudre.

2
répondu Heider Sati 2012-03-24 21:37:13

avait un problème similaire avec tous nos serveurs de 2008. Le journal de sécurité a complètement cessé de fonctionner à cause d'un GPO qui a pris le groupe D'utilisateurs authentifiés et la permission de lecture loin de la clé HKLM\System\CurrentControlSet\Services\EventLog\security

Mettre ce retour par Microsoft recommandation du corrigé le problème. Je soupçonne donner à tous les utilisateurs authentifiés lire à un niveau plus élevé permettra également de corriger votre problème.

1
répondu Steve M 2011-11-11 03:53:38

j'ai frappé question similaire - dans mon cas Source contenait < , > caractères. Les machines 64 bits utilisent la nouvelle base even log-xml je dirais et ces caractères (définis à partir de la chaîne de caractères) créent le xml invalide qui provoque l'exception. On peut soutenir que cela devrait être considéré comme un problème de Microsoft - ne pas traiter la Source (nom/chaîne de caractères) correctement.

1
répondu alflesio 2012-08-01 18:30:35

bien que la réponse de l'installateur soit une bonne réponse, elle n'est pas toujours pratique lorsqu'il s'agit d'un logiciel que vous n'avez pas écrit. Une réponse simple est de créer le journal et la source de l'événement en utilisant la commande PowerShell New-EventLog ( http://technet.microsoft.com/en-us/library/hh849768.aspx )

exécutez PowerShell en tant qu'administrateur et exécutez la commande suivante en changeant le nom du journal et la source dont vous avez besoin.

New-EventLog -LogName Application - Source Tfsagregator

Je l'ai utilisé pour résoudre l'Exception Event Log lorsque L'agrégateur exécute issue de codeplex.

1
répondu John Brown 2014-12-12 23:23:29

il semble y avoir une solution évidente et évidente à cela que je n'ai pas encore vu un énorme inconvénient, au moins là où il n'est pas pratique d'obtenir des droits administratifs afin de créer votre propre source d'événement: utilisez une qui est déjà là.

les deux que j'ai commencé à utiliser sont" .net Runtime "et" Application Error", qui semblent tous les deux présents sur la plupart des machines.

principaux inconvénients sont l'incapacité de grouper par cet événement, et que vous n'avez probablement pas d'ID D'événement associé, ce qui signifie que l'entrée du journal peut très bien être préfixée avec quelque chose à l'effet de "la description pour L'ID D'événement 0 à partir de source.Runtime ne peut pas être trouvé...."si vous l'omettez, mais le journal va en, et le résultat ressemble largement raisonnable.

le code qui en résulte finit par ressembler à:

EventLog.WriteEntry(
    ".Net Runtime", 
    "Some message text here, maybe an exception you want to log",
    EventLogEntryType.Error
    );

bien sûr, puisqu'il y a toujours une chance que vous soyez sur une machine qui n'a pas ces sources d'événements pour quelque raison que ce soit, vous voulez probablement try {} catch{} envelopper au cas où il échoue et rend les choses pire, mais les événements sont maintenant saveable.

1
répondu tobriand 2017-04-19 17:10:51

mon application est installée sur les serveurs Web des clients. Plutôt que de jouer avec les permissions de service réseau et le registre, j'ai choisi de vérifier SourceExists et d'exécuter CreateEventSource dans mon installateur.

j'ai aussi ajouté un try/catch autour de log.source = "xx" dans l'application pour le définir à une source connue si ma source d'événement n'était pas créée (cela ne se produirait que si je changeais un .dll au lieu de re-installer).

0
répondu basher 2013-07-22 14:31:04
La Solution

est très simple - exécutez L'Application Visual Studio en mode Administrateur !

0
répondu frigate 2013-08-26 05:18:44

essayez ci-dessous dans le web.config

 <system.web>

<trust level="Full"/>

</system.web>
0
répondu Anjan Kant 2016-05-10 09:55:24

j'ai eu ce problème quand j'ai lancé une application dans VS. Tout ce que j'avais à faire était d'exécuter le programme en tant qu'Administrateur une fois, puis je pouvais exécuter à partir de L'intérieur de VS.

pour exécuter en tant qu'administrateur, il suffit de naviguer dans votre dossier de débogage dans Windows explorer. Cliquez-droit sur le programme et choisir Exécuter en tant qu'administrateur.

-1
répondu Bob Horn 2011-12-13 15:08:57

reconstruire la solution a fonctionné pour moi

-3
répondu stephen ebichondo 2011-12-09 11:24:39