System.Ochrona.SecurityException podczas zapisu do dziennika zdarzeń

Pracuję nad portowaniem ASP.NET aplikacja z serwera 2003 (IIS6) do serwera 2008 (IIS7).

Kiedy próbuję odwiedzić stronę w przeglądarce dostaję to:

Błąd serwera w aplikacji'/'.

Wyjątek Bezpieczeństwa

Opis: Aplikacja próbowała wykonać operację niedozwoloną przez politykę bezpieczeństwa. Aby przyznać tej aplikacji wymagane uprawnienia, skontaktuj się z administratorem systemu lub zmień zaufanie aplikacji poziom w pliku konfiguracyjnym.

Szczegóły Wyjątku: System.Ochrona.SecurityException: źródło nie zostało znalezione, ale nie można przeszukiwać niektórych lub wszystkich dzienników zdarzeń. Niedostępne dzienniki: Bezpieczeństwo

Błąd Źródła:

Podczas wykonywania bieżącego żądania sieciowego wygenerowano nieobsługiwany wyjątek. Informacje dotyczące pochodzenia i lokalizacji wyjątku można zidentyfikować za pomocą poniższego śledzenia stosu wyjątków.

Stack Trace:

[SecurityException: źródło nie zostało znalezione, ale nie można przeszukiwać niektórych lub wszystkich dzienników zdarzeń. Niedostępne dzienniki: bezpieczeństwo.]

System.Diagnostyka.EventLog.FindSourceRegistration (String source, String machineName, Boolean readOnly) + 562 System.Diagnostyka.EventLog.SourceExists (String source, String machineName) + 251

[snip]

To są rzeczy, które zrobiłem, aby spróbować go rozwiązać:

  1. Dać" wszystkim " pełne uprawnienia dostępu do klucz HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Security. To zadziałało. Ale oczywiście nie mogę tego zrobić w produkcji. Więc usunąłem uprawnienia "wszyscy" po uruchomieniu aplikacji przez kilka minut i błąd pojawił się ponownie.

  2. Utworzyłem źródło w dzienniku aplikacji i dzienniku zabezpieczeń (i zweryfikowałem, że istnieje poprzez regedit) podczas instalacji z podwyższonymi uprawnieniami, ale błąd pozostał.

  3. Dałem aplikacji pełny poziom zaufania w pliku web.config (i za pomocą appcmd.exe), ale nie / align = "left" /

Czy ktoś wie, co można tu zrobić?

PS: To jest kontynuacja tego pytania . Podążałem za udzielonymi odpowiedziami, ale bezskutecznie(patrz #2 powyżej).

Author: Community, 2009-08-13

22 answers

Aby dać Network Service uprawnienia do odczytu klucza EventLog/Security (zgodnie z sugestią Firenzi i royrules22) postępuj zgodnie z instrukcjami z http://geekswithblogs.net/timh/archive/2005/10/05/56029.aspx

  1. Otwórz Edytor rejestru:
    1. Select Start then Run
    2. wpisz regedt32 lub regedit
  2. Przejdź/rozwiń do następującego klucza:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Security

  3. Kliknij prawym przyciskiem myszy na ten wpis i wybierz Uprawnienia

  4. Dodaj użytkownika Network Service

  5. Give it Read permission

Aktualizacja: powyższe kroki są w porządku na komputerach deweloperskich, gdzie nie używasz procesu wdrażania do instalacji aplikacji.
Jeśli jednak wdrożysz swoją aplikację na innych maszynach, rozważ zarejestrowanie źródeł dziennika zdarzeń podczas instalacji , jak sugerowano w SailAvid 's i Nicole Calinoiu' s odpowiedzi.

Używam Funkcja PowerShell (wywołanie w 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
Author: Michael Freidgeim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:53

Problem polega na tym, że EventLog.SourceExists próbuje uzyskać dostęp do klucza EventLog\Security, Dostęp który jest dozwolony tylko dla administratora.

Typowym przykładem logowania do programu C# jest:

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);

Jednak poniższe linie nie powiodą się, jeśli program nie ma uprawnień administratora, a klucz nie zostanie znaleziony w EventLog\Application, ponieważ EventLog.SourceExists spróbuje uzyskać dostęp do EventLog\Security.

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

Dlatego zalecanym sposobem jest utworzenie skryptu instalacyjnego, który wytworzy odpowiedni klucz, mianowicie:

HKEY_LOCAL_MACHINE \ SYSTEM\CurrentControlSet\Services \ EventLog\Application \ dotNET Przykładowa aplikacja

Można następnie usunąć te dwie linie.

Możesz również utworzyć plik .reg, aby utworzyć klucz rejestru. Po prostu zapisz następujący tekst do pliku create.reg:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\dotNET Sample App]
 50
Author: SailAvid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-06 10:40:39

Rozwiązaniem było nadanie uprawnień do odczytu konta "Network Service" na EventLog/Security key.

 44
Author: encee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-22 18:34:14

Dla mnie ony nadawanie uprawnień' Read ' dla 'NetworkService' cała gałąź'EventLog' zadziałała.

 8
Author: evictorov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-03 12:22:16

Miałem bardzo podobny problem z programem konsolowym, który rozwijam pod VS2010 (uaktualniony z VS2008 pod XP) Mój prog używa EnLib do logowania. Błąd został wywołany, ponieważ EntLib nie miał uprawnień do rejestracji nowego źródła zdarzenia.

Więc zacząłem raz mój skompilowany prog jako Administrator : zarejestrował Źródło zdarzenia. Potem wróciłem do rozwoju i debugowania od wewnątrz VS bez problemu.

(Możesz również odnieść się do http://www.blackwasp.co.uk/EventLog_3.aspx , pomogło mi

 7
Author: oldbrazil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-18 17:02:08

Staram się prawie wszystko tutaj, aby rozwiązać ten problem... Podzielam się tutaj odpowiedzią, która mi pomaga:

Inny sposób rozwiązania problemu:

  • w konsoli IIS przejdź do puli aplikacji zarządzającej witryną i zwróć uwagę na uruchamiającą ją tożsamość (zazwyczaj usługę sieciową)
  • Upewnij się, że ta tożsamość może odczytać KEY_LOCAL_MACHINE \ SYSTEM\CurrentControlSet\Services \ Eventlog (rigth-click, autoryzacje)
  • teraz zmień tożsamość tej puli aplikacji na System lokalny, apply i switch back to Network Service

Dane uwierzytelniające zostaną przeładowane i EventLog będzie dostępny

W http://geekswithblogs.net/timh/archive/2005/10/05/56029.aspx , Dzięki Michael Freidgeim

 6
Author: Gelásio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-30 16:41:54

Ten wyjątek występował dla mnie z aplikacji konsoli. NET działającej jako zaplanowane zadanie i próbowałem zrobić zasadniczo to samo-utworzyć nowe źródło zdarzeń i zapisać do dziennika zdarzeń.

W końcu ustawienie pełnych uprawnień dla użytkownika, pod którym zadanie było uruchomione na następujących klawiszach załatwiło mi sprawę:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Security
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog
 5
Author: tswann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-15 16:20:39

Natknąłem się na ten sam problem, ale musiałem przejść o jeden poziom i dać wszystkim pełny dostęp do klucza HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\, zamiast zejść do bezpieczeństwa, które wyjaśniło problem dla mnie.

 4
Author: nodonoghue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-25 21:14:35

Ten sam problem na Windows 7 64bits. Uruchom jako administrator rozwiązał problem.

 3
Author: Dom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-08 15:40:00

FYI...my problem polegał na tym, że przypadkowo wybrano" usługę lokalną "jako konto na właściwościach ProcessInstaller zamiast"System lokalny". Po prostu wspominając o każdym innym, którzy podążali za samouczkiem MSDN, jak pokazuje najpierw wybór lokalnych usług i nie zwracałem szczególnej uwagi....

 3
Author: DaleS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-08 21:54:23

Nowy klucz z użytą nazwą źródłową należy utworzyć w HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog \ Application w regEdit podczas korzystania z systemu .Diagnostyka.EventLog.Writeentry ("SourceName"," ErrorMessage", EventLogEntryType.Błąd);

Więc zasadniczo twój użytkownik nie ma uprawnień do tworzenia klucza. W zależności od używanego użytkownika można wykonać następujące czynności z wartości tożsamości w Ustawieniach zaawansowanych puli aplikacji:

  1. Uruchom RegEdit i przejdź do HKEY_LOCAL_MACHINE \ SYSTEM\CurrentControlSet\services \ eventlog
  2. Kliknij prawym przyciskiem myszy w EventLog i wybierz Uprawnienia... opcja 3.Dodaj użytkownika z pełnym dostępem kontroli.

    - jeśli używasz "NetworkService" Dodaj użytkownika usługi sieciowej

    - jeśli używasz "ApplicationPoolIdentity" Dodaj IIS APPPOL{nazwa puli aplikacji} (użyj lokalnej lokalizacji maszyny podczas wyszukiwania użytkownika).

    - jeśli jesteś używając "LocalSystem" Upewnij się, że użytkownik ma uprawnienia administratora. Nie jest zalecany w przypadku luk w zabezpieczeniach.

  3. Powtórz kroki od 1 do 3 dla HKEY_LOCAL_MACHINE \ SYSTEM\CurrentControlSet\services \ eventlog\Security

Do debugowania z Visual Studio używam "NetworkService "( jest ASP.NET użytkownik), a kiedy strona jest publikowana użyłem "AppicationPoolIdentity".

 3
Author: Pablishe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-07 15:41:26

Nie pracuję na IIS, ale mam aplikację, która rzuca ten sam błąd na polu 2K8. Działa dobrze na pudełku 2K3.

Moim postanowieniem było "uruchomić jako administrator", aby dać aplikacji podwyższone prawa i wszystko działa szczęśliwie. Mam nadzieję, że to pomoże poprowadzić cię we właściwym kierunku.

Windows 2008 to prawa/uprawnienia / elewacja naprawdę różni się od Windows 2003, gar.

 2
Author: thomasnguyencom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-20 17:10:42

Cześć napotkałem ten sam problem podczas tworzenia aplikacji i chciałem zainstalować ją na zdalnym komputerze, naprawiłem go wykonując następujące czynności:

1) Przejdź do rejestru, zlokalizuj: HKLM \ System\CurrentControlSet\Services \ EventLog\Application (???YOUR_SERVICE_OR_APP_NAME???)

Zauważ, że "(???YOUR_SERVICE_OR_APP_NAME???) "jest nazwą usługi aplikacji zdefiniowaną podczas tworzenia wdrożenia. net, na przykład, jeśli nowa aplikacja została nazwana "moja nowa aplikacja", a następnie kluczem będzie: HKLM \ System\CurrentControlSet\Services \ EventLog\Application\My New app

Note2: w zależności od tego, do którego eventlogu zapisujesz, możesz znaleźć w swoim dev box, \ Application\ (jak wspomniano powyżej), lub również (\System) lub (\Security) w zależności od tego, do jakiego zdarzenia zapisuje się Twoja aplikacja, głównie (\Application) powinien być cały czas w porządku.

2) będąc na klawiszu powyżej, z menu wybierz "Plik" -> "Eksportuj", a następnie zapisz plik. (Uwaga: to stworzy Twój niezbędne ustawienia rejestru gdy aplikacja będzie musiała uzyskać dostęp do tego klucza, aby zapisać go do przeglądarki zdarzeń), nowy plik będzie .Plik REG, dla dobra argumentacji, nazwij to " moja nowa aplikacja.REG "

3) podczas wdrażania na produkcji, skonsultować się z administratorem systemu serwera (SA), przekazać "moja nowa aplikacja.Plik REG" wraz z aplikacją i poproś SA o zainstalowanie tego pliku REG, gdy to zrobisz (jako administrator) utworzy to klucz dla Twojej aplikacji.

4) Uruchom aplikację, nie powinien mieć dostępu do niczego innego niż ten klucz.

Problem powinien być już rozwiązany.

Przyczyna:

Podczas tworzenia aplikacji, która zapisuje cokolwiek do EventLog, wymagałaby do tego klucza w rejestrze Eventlog, jeśli ten klucz nie zostanie znaleziony, spróbowałaby go utworzyć, co potem się nie powiedzie, ponieważ nie ma do tego uprawnień. Powyższy proces, jest podobny do wdrożenia aplikacji (ręcznie), podczas gdy sami ją tworzymy i nie ma potrzeby masz ból głowy, ponieważ nie poprawiasz rejestru, dodając uprawnienia do wszystkich, co jest ryzykiem bezpieczeństwa na serwerach produkcyjnych.

Mam nadzieję, że to pomoże rozwiązać ten problem.

 2
Author: Heider Sati,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-24 21:37:13

Miał podobny problem ze wszystkimi naszymi serwerami z 2008 roku. Dziennik bezpieczeństwa przestał działać całkowicie z powodu GPO, który odebrał grupie uwierzytelnionych użytkowników i uprawnienia do odczytu z klucza HKLM\System\CurrentControlSet\Services\EventLog\security

Przywrócenie tego zgodnie z zaleceniem Microsoftu poprawiło problem. Podejrzewam, że podanie wszystkich uwierzytelnionych użytkowników przeczytanych na wyższym poziomie również rozwiąże twój problem.

 1
Author: Steve M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-11 03:53:38

Trafiłem w podobny problem - w moim przypadku źródło zawarte <, > postaci. 64-bitowe maszyny używają nowej bazy even log-xml, którą powiedziałbym i te znaki (ustawione od string) tworzą nieprawidłowy xml, co powoduje wyjątek. Prawdopodobnie należy rozważyć problem z Microsoft - Nieprawidłowa obsługa źródła (nazwa/ciąg znaków) poprawnie.

 1
Author: alflesio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-01 18:30:35

Chociaż odpowiedź instalatora jest dobrą odpowiedzią, nie zawsze jest praktyczna w przypadku oprogramowania, którego nie napisałeś. Prostą odpowiedzią jest utworzenie dziennika i źródła zdarzeń za pomocą polecenia PowerShell New-EventLog (http://technet.microsoft.com/en-us/library/hh849768.aspx )

Uruchom PowerShell jako Administrator i uruchom następujące polecenie zmieniając nazwę dziennika i źródło, które potrzebujesz.

New-EventLog-LogName Application - Source TFSAggregator

Użyłem go do rozwiązania wyjątku Event Log, gdy agregator uruchamia problem z codeplex.

 1
Author: John Brown,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-12 23:23:29

Wydaje się, że istnieje rażąco oczywiste rozwiązanie tego, że jeszcze nie widziałem ogromnego minusa, przynajmniej tam, gdzie nie jest praktyczne, aby uzyskać prawa administracyjne w celu stworzenia własnego źródła zdarzenia: użyj jednego, który już tam jest.

Dwa, z których zacząłem korzystać to". Net Runtime " i "Application Error", z których oba wydają się być obecne na większości maszyn.

Główne wady to niemożność grupowania według tego zdarzenia, i że prawdopodobnie nie ma powiązanego Identyfikatora zdarzenia, co oznacza, że wpis dziennika może być poprzedzony czymś w taki sposób, że " nie można znaleźć opisu dla Identyfikatora zdarzenia 0 ze źródła. Net Runtime...."jeśli to pominiesz, ale log wchodzi, A wyjście wygląda ogólnie sensownie.

Wynikowy kod kończy się następująco:

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

Oczywiście, ponieważ zawsze jest szansa, że jesteś na maszynie, która nie ma tych źródeł zdarzeń z jakiegokolwiek powodu, prawdopodobnie chcesz to zapakować try {} catch{} na wypadek, gdyby się to nie udało i pogorszyło sytuację, ale zdarzenia są teraz możliwe do uratowania.

 1
Author: tobriand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-19 17:10:51

Moja aplikacja zostanie zainstalowana na klienckich serwerach internetowych. Zamiast majstrować przy uprawnieniach Usług Sieciowych i rejestrze, zdecydowałem się sprawdzić SourceExists i uruchomić CreateEventSource w moim instalatorze.

Dodałem również spróbować / złapać wokół log.source = "xx" w aplikacji, aby ustawić go do znanego źródła, jeśli moje źródło zdarzenia nie został utworzony (to tylko pochodzić, jeśli ja hot swaped a .dll zamiast ponownej instalacji).

 0
Author: basher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-22 14:31:04

Rozwiązanie jest bardzo proste-Uruchom aplikację Visual Studio w trybie Admin !

 0
Author: frigate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-26 05:18:44

Spróbuj poniżej w sieci.config

 <system.web>

<trust level="Full"/>

</system.web>
 0
Author: Anjan Kant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-10 09:55:24

Miałem ten problem podczas uruchamiania aplikacji w VS. wszystko, co musiałem zrobić, to uruchomić program jako Administrator raz, a następnie można uruchomić z wewnątrz VS.

Aby uruchomić jako Administrator, po prostu przejdź do folderu debugowania w Eksploratorze windows. Kliknij prawym przyciskiem myszy program i wybierz Uruchom jako administrator.

 -1
Author: Bob Horn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-13 15:08:57

Odbudowa rozwiązania zadziałała dla mnie

 -3
Author: stephen ebichondo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-09 11:24:39