시스템, 보안보안.이벤트 로그에 쓸 때 예외 발생
ASP 포팅 작업을 하고 있습니다.서버 2003(및 IIS6)에서 서버 2008(IIS7)으로 NET 앱.
브라우저의 페이지를 방문하려고 하면 다음과 같은 메시지가 나타납니다.
'/' 응용 프로그램에 서버 오류가 있습니다.
보안 예외
설명:응용 프로그램이 보안 정책에서 허용하지 않는 작업을 수행하려고 했습니다.이 응용 프로그램에 필요한 권한을 부여하려면 시스템 관리자에게 문의하거나 구성 파일에서 응용 프로그램의 신뢰 수준을 변경하십시오.
예외 세부 정보:시스템.보안.보안.예외:원본을 찾을 수 없지만 일부 또는 모든 이벤트 로그를 검색할 수 없습니다.액세스할 수 없는 로그:보안.
소스 오류:
현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 생성되었습니다.예외의 출처 및 위치에 대한 정보는 아래의 예외 스택 추적을 사용하여 식별할 수 있습니다.
스택 추적:
[보안]예외:원본을 찾을 수 없지만 일부 또는 모든 이벤트 로그를 검색할 수 없습니다.액세스할 수 없는 로그:보안.]
시스템. 진단.이벤트 로그.FindSourceRegistration(문자열 소스, 문자열 시스템 이름, 부울 읽기 전용) +562 시스템.진단.이벤트 로그.소스가 있음(문자열 소스, 문자열 시스템 이름) +251
[찍찍찍]
이 문제를 해결하기 위해 제가 한 일은 다음과 같습니다.
" 전체 을 부여합니다.모 든 사 전 체 액 권 한 부 여
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Security
효과가 있었어요.하지만 당연히 저는 생산에서 이것을 할 수 없습니다.그래서 몇 분 동안 앱을 실행한 후 "모두" 권한을 삭제했고 오류가 다시 나타났습니다.권한이 상승된 상태에서 설치하는 동안 응용 프로그램 로그와 보안 로그에 소스를 생성했지만(그리고 regedit을 통해 소스가 존재함을 확인했습니다) 오류가 남아 있습니다.
에 완전한 수준을 했습니다.
web.config
file 파및사 (일용및)))appcmd.exe
하지만 소용이 없습니다.
여기서 무엇을 할 수 있는지에 대한 통찰력을 가진 사람이 있습니까?
PS: 이 질문에 대한 후속 조치입니다.저는 주어진 답변을 따랐지만 소용이 없었습니다(위의 #2 참조).
을 주다Network Service
에 읽기 EventLog/Security
키(Firenzi 및 royrules22에서 제안한 대로)는 http://geekswithblogs.net/timh/archive/2005/10/05/56029.aspx 의 지침을 따릅니다.
- 레지스트리 편집기 열기:선택한다.
Start
그리고나서Run
.를 입력하십시오.regedt32
또는regedit
- 다음 키로 이동/확장합니다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Security
오른쪽 단추로 하고 Permissions( 권한)을 선택합니다.
추가합니다.
Network Service
사용자읽기 권한 부여
업데이트: 위의 단계는 배포 프로세스를 사용하여 응용 프로그램을 설치하지 않는 개발자 컴퓨터에서 사용할 수 있습니다.
그러나 응용 프로그램을 다른 컴퓨터에 배포하는 경우 SailAvid 및 Nicole Calinoiu의 답변에 제시된 대로 설치 중에 이벤트 로그 소스를 등록하는 것이 좋습니다.
PowerShell 기능을 사용하고 있습니다(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")
}
}
}
참고 항목Microsoft KB 2028427 ASP에서 Windows 이벤트 로그에 쓰지 못함을 참조하십시오.NET 또는 ASP 응용 프로그램
문제는 그것이EventLog.SourceExists
.EventLog\Security
키, 관리자만 액세스할 수 있습니다.
에 로그인하는 C# 프로그램의 인 예EventLog
다음과 같습니다.
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);
EventLog\Application
~하듯이EventLog.SourceExists
에 시도합니다.EventLog\Security
.
if (!EventLog.SourceExists(sSource))
EventLog.CreateEventSource(sSource, sLog);
따라서 권장되는 방법은 설치 스크립트를 생성하여 해당 키, 즉 다음을 생성하는 것을 생성하는 것입니다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\이벤트 로그\응용 프로그램\도트NET 샘플 앱
그런 다음 두 줄을 제거할 수 있습니다.
다음을 생성할 수도 있습니다..reg
레지스트리 키를 만드는 파일입니다. 됩니다.create.reg
:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\dotNET Sample App]
해결책은 "네트워크 서비스" 계정에 EventLog/Security 키에 대한 읽기 권한을 부여하는 것이었습니다.
전체 'EventLog' 분기에 'NetworkService'에 대한 'Read' 권한을 부여한 자금이 작동했습니다.
VS2010에서 개발한 콘솔 프로그램(XP에서 VS2008으로 업그레이드)에서도 비슷한 문제가 발생했습니다. 이 프로그램은 EnLib를 사용하여 로깅을 수행합니다.EntLib에 새 이벤트 소스를 등록할 수 있는 권한이 없기 때문에 오류가 발생했습니다.
그래서 저는 컴파일된 프로그램을 Administrator로 시작했습니다. 이벤트 소스를 등록했습니다.그런 다음 VS 내부에서 문제없이 개발 및 디버깅 작업을 수행했습니다.
(http://www.blackwasp.co.uk/EventLog_3.aspx, 을 참조할 수도 있습니다.) 그것은 저에게 도움이 되었습니다.
이 예외는 A에서 발생했습니다.예약된 작업으로 실행되는 NET 콘솔 앱과 기본적으로 동일한 작업을 수행하려고 했습니다. 새 이벤트 소스를 만들고 이벤트 로그에 기록하는 것이었습니다.
결국 다음 키에서 작업이 실행되는 사용자에 대한 전체 사용 권한을 설정하는 것이 유용했습니다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Security
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog
이 문제를 해결하기 위해 여기 있는 거의 모든 것을 시도합니다.여기에 도움이 되는 답을 공유합니다.
문제를 해결하는 다른 방법:
- IIS 콘솔에서 사이트를 관리하는 응용 프로그램 풀로 이동하여 사이트를 실행하는 ID(일반적으로 네트워크 서비스)를 기록합니다.
- 이 ID가 KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\로 표시될 수 있는지 확인합니다.이벤트 로그(오른쪽 클릭, 권한 부여)
- 이제 이 애플리케이션 풀의 ID를 로컬 시스템으로 변경하고 적용한 다음 네트워크 서비스로 다시 전환합니다.
자격 증명이 다시 로드되고 EventLog에 연결할 수 있습니다.
http://geekswithblogs.net/timh/archive/2005/10/05/56029.aspx 에서, Michael Freidgeim에게 감사합니다.
시스템을 사용할 때 regEdit의 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application 아래에 소스 이름이 사용된 새 키를 생성해야 합니다.진단.이벤트 로그.WriteEntry("SourceName", "ErrorMessage", EventLogEntryType).오류);
따라서 기본적으로 사용자에게 키를 만들 수 있는 권한이 없습니다.는 사용 중인 사용자에 따라 Application Pool 고급 설정의 ID 값을 사용하여 다음 작업을 수행할 수 있습니다.
- RegEdit를 실행하고 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog로 이동합니다.
EventLog 키를 마우스 오른쪽 버튼으로 클릭하고 Permissions...를 선택합니다.옵션 3.전체 제어 권한을 가진 사용자를 추가합니다.
- "네트워크 서비스"를 사용하는 경우 NETWORK SERVICE 사용자를 추가
-"ApplicationPoolIdentity"에 있는 경우 IIS APPOL{사용자의 앱 풀 이름}을(를) 추가합니다(사용자를 검색할 때 로컬 컴퓨터 위치 사용).
- "로컬 시스템"을 사용하는 경우 사용자에게 관리자 권한이 있는지 확인합니다.취약성에는 권장되지 않습니다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\에 대해 1~3단계를 반복합니다.보안
Visual Studio를 사용한 디버깅의 경우 "NetworkService"(ASP)를 사용합니다.NET 사용자) 및 사이트가 게시될 때 "ApplicationPoolIdentity"를 사용했습니다.
동일한 문제가 발생했지만 한 단계 더 올라가 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\에 대한 모든 사용자의 전체 액세스 권한을 부여해야 했습니다.EventLog\ 키는 보안으로 이동하는 대신 문제를 해결했습니다.
Windows 7 64비트에서도 동일한 문제가 발생했습니다.관리자가 문제를 해결할 때 실행합니다.
이에 대한 명백한 해결책이 있는 것 같습니다. 저는 아직 큰 단점을 보지 못했습니다. 적어도 독자적인 이벤트 소스를 만들기 위해 관리 권한을 얻는 것은 현실적이지 않습니다.이미 있는 것을 사용합니다.
제가 사용하기 시작한 두 가지는 "입니다.Net Runtime" 및 "Application Error" 두 가지 모두 대부분의 컴퓨터에 존재할 것으로 보입니다.
주요 단점은 해당 이벤트를 기준으로 그룹화할 수 없고 관련 이벤트 ID가 없을 수 있다는 것입니다. 이는 로그 항목에 "소스에서 이벤트 ID 0에 대한 설명"이라는 취지의 접두사가 붙어 있을 수 있음을 의미합니다.Net Runtime을 찾을 수 없습니다..."를 생략하면 로그가 들어가고 출력이 광범위하게 감지됩니다.
결과 코드는 다음과 같습니다.
EventLog.WriteEntry(
".Net Runtime",
"Some message text here, maybe an exception you want to log",
EventLogEntryType.Error
);
물론, 어떤 이유로든 당신이 그러한 이벤트 소스를 가지고 있지 않은 기계에 있을 가능성이 항상 있기 때문에, 당신은 아마도 그것을 원할 것입니다.try {} catch{}
실패하여 상황을 악화시킬 경우를 대비하여 랩을 씌우지만, 이벤트는 이제 저장할 수 있습니다.
참고로... 제 문제는 실수로 "로컬 서비스"를 프로세스 속성에 대한 계정으로 선택한 것입니다."로컬 시스템"이 아닌 설치 프로그램입니다.MSDN 튜토리얼을 따르는 다른 사람들을 위해 언급하는 것은 로컬 서비스 선택이 먼저 표시되고 저는 주의를 기울이지 않았습니다.
IIS에서 작업하지는 않지만 2K8 상자에서 동일한 오류를 발생시키는 응용 프로그램이 있습니다.2K3 박스에서 잘 작동합니다. 계산해 보세요.
저의 결심은 "관리자 권한으로 실행"하여 애플리케이션에 권한을 높이고 모든 것이 행복하게 작동하도록 하는 것이었습니다.이것이 당신을 올바른 방향으로 인도하는 데 도움이 되기를 바랍니다.
Windows 2008은 권한/권한/승격 기능이 Windows 2003과는 정말 다릅니다.
안녕하세요. 애플리케이션을 개발할 때 동일한 문제가 발생하여 원격 PC에 설치하려고 했습니다. 다음을 수행하여 수정했습니다.
레지스트리로 이동하여 HKLM\System\을 찾습니다.현재 컨트롤 세트\서비스\이벤트 로그\응용 프로그램(?_SERVICE_OR_APP_NAME??)
참고: "--귀하의 _SERVICE_OR_APP_NAME?)"는 을 생성할 때 정의한 대로 응용 프로그램 서비스 이름입니다.예를 들어, NET 배포 환경에서 새 애플리케이션의 이름을 "My new App"으로 지정한 경우 핵심은 HKLM\System\입니다.현재 컨트롤 세트\서비스\이벤트 로그\응용 프로그램\내 새 앱
참고 2: 어떤 이벤트 로그에 기록하느냐에 따라 DEV 상자, \Application\(위에서 언급한 바와 같이) 또는 응용 프로그램이 어떤 이벤트에 기록하느냐에 따라 (\System) 또는 (\Security)를 찾을 수 있습니다. 대부분(\Application)은 항상 문제가 없어야 합니다.
위의 키를 누른 후 메뉴에서 "FILE" -> "Export"를 선택하고 파일을 저장합니다. (참고:이렇게 하면 응용 프로그램이 이벤트 뷰어에 쓰기 위해 이 키에 액세스해야 할 때 필요한 레지스트리 설정이 생성됩니다. 새 파일은 입니다.REG 파일은 논쟁을 위해 "My New App"이라고 부릅니다.REG"
프로덕션에 배포할 때는 서버의 시스템 관리자(SA)에게 문의하여 "내 새 앱"을 전달합니다.응용프로그램과 함께 REG" 파일을 사용하고 SA에게 이 REG 파일을 설치하도록 요청합니다. (관리자로서) 완료되면 응용프로그램에 대한 키가 생성됩니다.
응용 프로그램을 실행합니다. 이 키 이외의 다른 항목에 액세스할 필요가 없습니다.
지금쯤이면 문제가 해결될 겁니다.
원인:
EventLog에 기록하는 응용 프로그램을 개발할 때 이 키를 찾을 수 없는 경우 EventLog 레지스트리 아래에 해당 응용 프로그램에 대한 KEY가 필요합니다. 이 키를 생성하려고 하면 생성 권한이 없기 때문에 실패합니다.위의 프로세스는 애플리케이션을 수동으로 배포하는 것과 비슷하지만, 우리가 직접 이 프로세스를 만드는 것과 비슷하며, 프로덕션 서버의 보안 위험인 모든 사용자에게 권한을 추가하여 레지스트리를 조정하는 것이 아니므로 문제가 발생할 필요가 없습니다.
이것이 해결에 도움이 되길 바랍니다.
설치 프로그램 답변이 좋은 답변이긴 하지만 작성하지 않은 소프트웨어를 다룰 때 항상 실용적인 것은 아닙니다.간단한 답변은 PowerShell 명령 New-EventLog(http://technet.microsoft.com/en-us/library/hh849768.aspx) 를 사용하여 로그 및 이벤트 소스를 생성하는 것입니다.
PowerShell을 관리자로 실행하고 다음 명령을 실행하여 필요한 로그 이름과 소스를 변경합니다.
새 이벤트 로그 - 로그 이름 응용 프로그램 - 원본 TFSAggregator
Aggregator가 codeflex에서 실행될 때 이벤트 로그 예외를 해결하기 위해 사용했습니다.
2008년의 모든 서버에서 비슷한 문제가 발생했습니다.인증된 사용자 그룹을 가져가고 키에서 읽기 권한을 가져갔던 GPO 때문에 보안 로그가 완전히 작동하지 않습니다.HKLM\System\CurrentControlSet\Services\EventLog\security
Microsoft의 권장 사항에 따라 이 문제를 다시 적용하면 문제가 해결됩니다.인증된 모든 사용자에게 더 높은 수준의 읽기 권한을 부여하는 것도 문제를 해결할 수 있을 것으로 생각합니다.
나는 비슷한 문제에 부딪혔습니다 - 내 경우에는 소스가 포함되었습니다.<
,>
성격.64비트 시스템은 새로운 짝수 로그 - xml base를 사용하고 있으며 이러한 문자(문자열에서 설정)는 잘못된 xml을 생성하여 예외를 발생시킵니다.소스(이름/문자열)를 올바르게 처리하지 않는 Microsoft 문제를 고려해야 합니다.
내 앱은 클라이언트 웹 서버에 설치됩니다.네트워크 서비스 권한 및 레지스트리를 만지작거리는 대신 확인하기로 했습니다.SourceExists
그리고 실행CreateEventSource
설치 프로그램에 있습니다.
주변에 대한 시도/캐치도 추가했습니다.log.source = "xx"
이벤트 소스가 생성되지 않은 경우 이를 알려진 소스로 설정하기 위해 앱에 있습니다(이는 다시 설치하는 대신 .dll을 핫 스왑한 경우에만 표시됨).
Visual Studio Application을 관리 모드로 실행하면 매우 간단합니다!
콘솔 응용 프로그램에서 "게시"를 수행하여 설치 디스크를 생성했습니다.
OP에서 같은 오류가 발생했습니다.
클릭 솔루션이제대클릭습다니었되로▁right▁the▁click▁was다.
setup.exe
를 클릭합니다.Run as Administrator
이를 통해 설치 프로세스에서 필요한 권한을 사용할 수 있습니다.
VS 내에서 앱을 실행할 때 이 문제가 발생했습니다.프로그램을 Administrator로 한 번 실행하면 VS 내에서 실행할 수 있습니다.
관리자로 실행하려면 Windows 탐색기에서 디버그 폴더로 이동하면 됩니다.프로그램을 마우스 오른쪽 단추로 클릭하고 관리자 권한으로 실행을 선택합니다.
web.config에서 아래를 시도해 보십시오.
<system.web>
<trust level="Full"/>
</system.web>
솔루션 재구축이 효과적이었습니다.
언급URL : https://stackoverflow.com/questions/1274018/system-security-securityexception-when-writing-to-event-log
'source' 카테고리의 다른 글
MSYS에서 폴더 찾아보기 (0) | 2023.05.07 |
---|---|
WPF의 이미지가 흐려짐 (0) | 2023.05.07 |
Xcode 오류: "앱 ID를 개발팀에 등록할 수 없습니다." (0) | 2023.05.07 |
INER JOIN 상태에서 'OR'를 사용하는 것이 좋지 않은 생각입니까? (0) | 2023.05.07 |
팬더는 Excel(.xlsx) 파일을 열 수 없습니다. (0) | 2023.05.07 |