2010-06-18 9 views
18

ASP.NET 2.0 응용 프로그램의 새 버전을 배포 한 후 보안 예외가 발생하기 시작했습니다. "System.Security.SecurityException : 형식의 권한 요청 'System.Web.AspNetHostingPermission, System, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089'실패했습니다. "ASP.NET의 보안 예외 및 IIS 7.5의 사용자 프로필로드 옵션

인터넷에서 신속하게 조사한 후에 IIS 7.5 응용 프로그램 풀에서 "사용자 프로필로드"를 True로 설정하여이 isse를 해결할 수있었습니다. 이 솔루션은 유래 여기에 여러 번 언급 :

그러나 우리는 그것이 사실로 왜 이유를 찾을 수 없습니다. Google은 새 버전의 모든 변경 사항을 검토했지만 (기쁜 소식은 몇 가지만 있음) 의심스러운 사항을 발견하지 못했습니다 (일부 기사가 제안한대로 레지스트리 또는 임시 데이터에 액세스 할 수 없음). IIS 7.5에서 호스팅되는 ASP.NET 응용 프로그램에서 "Load User Profile (사용자 프로필로드)"옵션을 True로 설정해야 할 때 아무도 힌트를주지 못합니까?

세부 사항 :

  • 응용 프로그램 풀 : .NET 2.0; 매니지드 파이프 라인 모드 - 클래식; 신원 - 사용자 정의 도메인 계정
  • 은 IIS 6.0 (W2K3)에서
  • 가 : 구약과 고급 응용 프로그램 작업의 새로운 버전
  • IIS 7.5에서
  • 이 (W2K8-R2) : 응용 프로그램의 이전 버전 잘 작동; 응용 프로그램의 새 버전 보안을 예외가 발생 -이

사실이 감사에 설정 "로드 사용자 프로필"후 작업을 시작합니다!

편집 : 마침내이 문제의 원인을 발견했습니다! 우리 관리자는 응용 프로그램의 새 버전을 준비 환경에서 프로덕션 환경으로 복사하는 다른 기술을 사용했습니다. 그는 웹 서버를 중개자로 사용했습니다. 압축 된 릴리스를 제작 환경에 구축하고 파일을 압축 해제 한 후 다른 컴퓨터에서 가져온 파일을 "차단됨"으로 표시했습니다. https://superuser.com/questions/38476/this-file-came-from-another-computer-how-can-i-unblock-all-the-files-in-a도 참조하십시오. 그런 다음 ASP.NET은 완전 신뢰 대신 부분 신뢰로 이러한 바이너리를 논리적으로 실행하며 이는 실제로 응용 프로그램에서 언급 된 보안 예외를 야기했습니다..

"사용자 프로필로드"를 True로 설정하면 보안 예외가 부작용으로 수정되었습니다. "사용자 프로파일로드"가 거짓으로 설정된 경우 응용 프로그램 (코드가 아닐 수도 있습니다.NET BCL 또는 외부 어셈블리) 응용 프로그램 풀의 ID가 허용되지 않는 "C : \ Windows \ System32 \ config \ systemprofile \ AppData \ Local \ Microsoft \ Windows \ Temporary Internet Files"디렉터리에 대한 기본 정보를 쿼리하려고 시도합니다.

완전 신뢰와
  • : 액세스 부분 신뢰와 예외
  • 을 발생시키지 않습니다이 쿼리 작업 거부 : 접근이 쿼리 작업 거부는 보안 예외

"로드 사용자 프로필"만약 제기 True로 설정하면 응용 프로그램 풀이 시작될 때마다 사용자 디렉터리의 임시 프로필이 만들어집니다. 우리의 응용 프로그램은 응용 프로그램 풀의 ID가 허용되는이 프로필의 "Temporary Internet Files"디렉토리에 대한 정보를 쿼리하려고합니다. 따라서 부분적인 신뢰로도 예외가 발생하지 않습니다.

정말 멋진 문제 해결 세션입니다. :)

+0

피터 조사 작업을 해주셔서 감사합니다. 동일한 문제가 있었으며 스트림 유틸리티 (superuser.com 질문에 나열되어 있음)는 웹 응용 프로그램의 디렉토리에있는 모든 파일의 차단을 해제 한 방법이었습니다. 이제 사용자 프로필로드 옵션을 해제 할 수 있습니다! –

+1

완전히 우수합니다.이 문제에 직면하여 제대로 설명하지 못했습니다. –

+0

아래 답변에 대한 자세한 설명이 있습니다. http://stackoverflow.com/questions/17149132/what-exactly-happens-when-i-set-loaduserprofile-of-iis-pool –

답변

7

"사용자 프로필로드"설정이 임시 파일을 사용하는 데 도움이 될 수있는 또 다른 예제입니다. 때때로이 사용법은 간접적 일 수 있습니다. 예를 들어, SQL Express는 일부 상황에서이를 수행 할 수 있습니다.

제 조언. "사용자 프로파일로드"를 끄고 % TEMP %를 검사하십시오. 그런 다음 응용 프로그램 풀에 사용 된 도메인 계정에 % TEMP %의 디렉토리에 대한 전체 액세스 (또는 액세스 변경)를 시도하십시오. 아마 당신의 문제를 해결할 것입니다.

"System.Security.SecurityException : Request for"를받을 때 사용자 프로필의 어느 부분이 사용되는지 (또는 "액세스 거부"오류가 발생하는지) 로케일에 대한 프로세스 모니터 (http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx 참조)를 사용하는 것이 좋습니다. 형식 'System.Web.AspNetHostingPermission'예외의 사용 권한.

+1

감사합니다. 문제를 해결하는 데 도움이되었습니다. 응용 프로그램 풀 ID를 "C : \ Windows \ System32 \ config \ systemprofile \ AppData \ Local \ Microsoft \ Windows \ Temporary 인터넷 파일"디렉터리에 대한 읽기 권한이 필요합니다. 이 응용 프로그램은이 디렉토리의 기본 정보를 쿼리하기 만하면됩니다. 아마도 우리가 사용하는 외부 어셈블리 중 하나 (iTextSharp가 의심 스러울 때) 때문일 수 있습니다. 어쨌든 당신의 충고는 상황을 설명하는 데 도움이되었으므로 다시 한번 감사드립니다. – Peter

+0

피터를 환영합니다! – Oleg

+0

IIS에서 LoadUserProfile = true를 설정하고 기본 임시 폴더 % TEMP % 위치를'C : \ Users \ C : \ Users \ AccountName \ AppData \ Local \ Temp'에서 다른 위치로 변경할 수 있습니까? –

0

LoadUserProfile이 도움이 될 수있는 또 다른 영역은 WCF에서 신뢰할 수있는 MSMQ 바인딩을 구성 할 때입니다. 응용 프로그램 풀로드 사용자 프로필 설정이 true로 설정되어 있지 않으면 응용 프로그램 풀이 트러스트 된 계정으로 실행되고 있으면 SID가로드되지 않으므로 인증이 실패합니다.

1

동일한 문제가 발생하여 load user profile = true로 설정하여 문제를 해결할 수도 있습니다. 그러나 나는로드 사용자 프로필 = false로 되돌리고 응용 프로그램 풀을 다시 시작했지만 지금은 예외가 발생하지 않습니다. stackoverflow 및 Asp.net 및 iis 포럼 페이지의 모든 relavents 게시물을 살펴 보았습니다.