가상 디렉터리가 ASP.NET 원격 공유를 가리키는 경우 System.Security.SecurityException

이 문서는 원격 공유를 가리키는 가상 디렉터리를 사용하여 Microsoft ASP를 호스트할 때 발생할 수 있는 문제를 System.Security.SecurityException resolve 데 도움이 됩니다. NET 기반 애플리케이션.

원래 제품 버전: ASP.NET
원래 KB 번호: 320268

증상

원격 공유를 가리키는 가상 디렉터리를 사용하여 ASP를 호스트하는 경우 NET 기반 애플리케이션은 다음 예제 중 하나와 유사한 오류 메시지를 받을 수 있습니다.

  • 메시지 1

    보안 예외 설명: 애플리케이션이 보안 정책에서 허용되지 않는 작업을 수행하려고 했습니다. 이 애플리케이션에 필요한 권한을 부여하려면 시스템 관리자에게 문의하거나 구성 파일에서 애플리케이션의 신뢰 수준을 변경하세요.
    예외 세부 정보: System.Security.SecurityException: 보안 오류입니다.
    원본 오류:
    줄 30: 프라이빗 정적 부울 __intialized = false; 줄 31: 줄 32: public Global_asax() { Line 33: if ((ASP. Global_asax.__intialized == false)) { 줄 34: ASP. Global_asax.__intialized = true;

  • 메시지 2

    /ApplicationName 애플리케이션의 서버 오류입니다.
    파서 오류 설명: 이 요청을 처리하는 데 필요한 리소스를 구문 분석하는 동안 오류가 발생했습니다. 다음 특정 구문 분석 오류 세부 정보를 검토하고 원본 파일을 적절하게 수정하세요.
    파서 오류 메시지: ApplicationName.Global 형식을 로드할 수 없습니다.
    원본 오류: 줄 1: <%@ Application Codebehind="Global.asax.cs" Inherits="ApplicationName.Global" %> Source File: Path of Application\global.asax Line: 1

원인

네임스페이 System.Web 스에 가 적용되지 않습니다 AllowPartiallyTrustedCallersAttribute . 자세한 내용은 패턴 & 사례를 참조하세요.

이 특성이 없는 My_Computer_Zone 코드 그룹에 없는 모든 코드에는 FullTrust 사용자 권한이 필요합니다. 따라서 웹 애플리케이션 콘텐츠를 보유하는 원격 공유에는 FullTrust가 필요합니다.

해결 방법

이 동작을 resolve 원격 공유에 FullTrust 권한을 부여합니다.

  1. 웹 서버에서 관리 도구를 연 다음 Microsoft .NET Framework 구성을 두 번 클릭합니다.

  2. 런타임 보안 정책을 확장하고 컴퓨터를 확장한 다음 코드 그룹을 확장합니다.

  3. All_Code 마우스 오른쪽 단추로 클릭한 다음 새로 만들기를 선택합니다.

  4. 새 코드 그룹 만들기를 선택합니다. 코드 그룹에 애플리케이션 공유 이름과 같은 관련 이름을 지정합니다. 다음을 선택합니다.

  5. 이 코드 그룹의 조건 유형 선택 목록에서 URL을 선택합니다.

  6. URL 상자에 공유 경로를 다음 형식으로 입력합니다.
    file:////\\computername\\sharename\*

    참고

    computername을 원격 공유를 호스팅하는 컴퓨터의 이름으로 바꿉 있습니다. sharename을 공유 이름으로 바꿉 있습니다.

  7. 다음을 선택합니다. 다음 페이지에서 기존 권한 집합 사용을 선택한 다음 , FullTrust를 선택합니다.

  8. 다음을 선택한 다음 마침을 선택합니다.

  9. IIS(인터넷 정보 서비스)를 다시 시작하여 ASP.NET 작업자 프로세스를 다시 시작합니다.

Microsoft .NET Framework 구성관리 도구 아래에 표시되지 않는 경우 .NET Framework SDK(소프트웨어 개발 키트)를 설치하여 Microsoft .NET Framework 구성을 추가할 수 있습니다. 대신 다음 명령을 실행하여 변경할 수 있습니다.

Drive :\WINDOWS\Microsoft.NET\Framework\v2.0.50727\caspol.exe -m -ag 1 -url "file:////\\computername\sharename\*" FullTrust -exclusive on

이러한 인수가 수행하는 작업에 대한 자세한 내용은 다음 명령을 실행합니다.

caspol.exe -?

상태

이것은 의도적으로 설계된 동작입니다.

추가 정보

이 구성에서 ASP.NET 작업자 프로세스가 실행되는 계정에는 원격 공유에 대한 충분한 권한이 있어야 합니다. Machine.config 파일의 태그를 사용하여 <processmodel> 작업자 프로세스가 실행되는 계정을 설정할 수 있습니다.

동작을 재현하는 단계

  1. 원격 공유를 가리키는 새 가상 디렉터리를 만듭니다.
  2. 가상 디렉터리에 대한 애플리케이션을 만듭니다. 공유에 연결하는 사용자에게 원격 콘텐츠에 대한 읽기 권한이 있는지 확인합니다.
  3. <processmodel>Machine.config 파일의 태그에서 사용자를 원격 공유에 대한 목록, 읽기 및 실행 권한이 있는 도메인 사용자로 변경합니다.
  4. 인라인 .aspx 파일을 만든 다음 원격 공유에 파일을 배치합니다.
  5. 페이지에 대한 요청을 만듭니다.

참조

ASPNET 계정이 ASP.NET 애플리케이션을 실행하는 데 필요한 권한에 대한 자세한 내용은 ASP.NET ID 소개를 참조하세요. ASP.NET 보안에 대한 자세한 내용은 INFO: ASP.NET 보안 개요를 참조하세요.