문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문
이 설명서는 보관되지만 유지 되지 않습니다.

권한 요청

중요중요

.NET Framework 버전 4에서 런타임 지원은 RequestMinimum, RequestOptionalRequestRefuse 권한 요청을 위해 제거되었습니다. 이 항목은 .NET Framework 4 이상을 기반으로 하는 코드에 적용되지 않습니다. 이 변경 내용 및 다른 변경 내용에 대한 자세한 내용은 .NET Framework 4의 보안 변경 내용을 참조하십시오.

권한 요청은 코드가 실행되기 위해 필요한 권한을 공용 언어 런타임에게 알려 주는 방식입니다. 코드의 어셈블리 범위에 특성(선언적 구문)을 삽입하여 어셈블리에 대한 권한을 요청합니다. 어셈블리가 만들어지면 언어 컴파일러는 요청된 권한을 어셈블리 매니페스트에 저장합니다. 로드할 때 공용 언어 런타임은 권한 요청을 검사하고 보안 정책 규칙을 적용하여 어셈블리에 부여할 권한을 결정합니다. 요청에 따라 공용 언어 런타임은 코드에 대한 권한을 거부할 수는 있지만 코드에 부여되지 않은 추가 권한을 부여할 수는 없습니다. 코드에 부여되는 최대 권한은 로컬 관리 정책에 의해 최종적으로 제어됩니다.

참고참고

컴퓨터에 저장하기 위한 코드는 기본적으로 완전 신뢰가 부여된 My_Computer_Zone에서 실행됩니다. 완전 신뢰로 실행될 경우 모든 권한 요청이 승인됩니다. ID 조건을 만족하지 않는 ID 권한에 대한 요청을 비롯하여 모든 권한 요청이 항상 성공합니다. 코드를 My_Computer_Zone에서만 실행하려는 경우 권한 요청은 의미가 없습니다. 코드를 다른 영역에서 실행하려는 경우에는 권한을 요청하는 것이 좋습니다.

참고참고

.NET Framework 3.5 서비스 팩 1 이상에서는 인트라넷 공유의 응용 프로그램이 기본적으로 완전 신뢰로 실행됩니다. 공유를 통해 응용 프로그램을 실행하려는 경우 컴퓨터에 상주하는 응용 프로그램과 마찬가지로 완전 신뢰로 실행됩니다. 자세한 내용은 완전 신뢰 모드에서 인트라넷 응용 프로그램 실행을 참조하십시오.

부분 신뢰로 실행되기 위해 코드가 권한을 요청할 필요는 없지만, 코드에서 항상 권한을 요청해야 하는 중요한 이유가 있습니다.

  • 권한을 요청하면 코드 실행이 허용되는 경우 코드를 정상적으로 실행할 가능성이 높아집니다. 최소한의 권한 집합을 요청하는 코드는 해당 권한을 받아야만 실행됩니다. 권한의 최소 집합을 식별하지 않은 경우 코드는 일부 권한이 부여되지 않아 정상적으로 실행되지 않는 모든 상황에 대처해야 합니다.

  • 권한을 요청하면 필요한 권한만 코드에 부여됩니다. 코드에 추가 권한이 부여되지 않으므로, 리소스를 손상시킬 수 있는 버그가 있거나 악성 코드에 의해 악용될지라도 이러한 추가 권한으로 보호한 리소스를 손상시키지 않을 수 있습니다. 코드에 필요한 권한만 요청해야 합니다.

  • 권한을 요청하면 관리자는 응용 프로그램에 필요한 최소한의 권한을 알 수 있으므로 이에 따라 보안 정책을 조정할 수 있습니다. Visual Studio 프로젝트의 프로젝트 속성 페이지에 있는 보안 탭에서 응용 프로그램에 필요한 권한을 확인할 수 있습니다. 관리자가 이 정보를 모르면 응용 프로그램을 관리할 수 없습니다.

권한을 요청하여 응용 프로그램이 원하지 않거나 작동에 필요한 권한을 공용 언어 런타임에게 알립니다. 예를 들어, 응용 프로그램에서 격리된 저장소를 사용하지 않고 로컬 하드 디스크에 쓰려면 응용 프로그램에 FileIOPermission이 있어야 합니다. 코드가 FileIOPermission을 요청하지 않고, 로컬 보안 설정에 의해 응용 프로그램에 이 권한이 허용되지 않으면, 응용 프로그램이 디스크에 쓰려고 할 때 보안 예외가 발생합니다. 응용 프로그램이 이 예외를 처리할 수 있을지라도 디스크에는 쓸 수 없습니다. 응용 프로그램이 사용자가 오랫 동안 사용하던 텍스트 편집 프로그램인 경우 이러한 동작으로 인해 사용자는 데이터를 저장할 수 없을 수도 있습니다. 한편, 응용 프로그램이 FileIOPermission을 요청하지만 로컬 보안 설정에 의해 응용 프로그램에 FileIOPermission이 허용되지 않으면, 응용 프로그램이 시작할 때 예외가 발생하여 사용자는 작업 손실 문제에 직면하지 않습니다. 또한, 응용 프로그램이 FileIOPermission을 요청하는 신뢰할 수 있는 응용 프로그램이면, 관리자는 보안 정책을 조정하여 원격 공유 위치에서 이 응용 프로그램을 실행하도록 허용할 수 있습니다.

코드가 보호된 리소스에 액세스하지 않거나 보호된 작업을 수행하지 않으면 권한을 요청할 필요가 없습니다. 예를 들어, 코드가 리소스를 사용하지 않고, 전달된 입력에 따라 결과만 계산하는 경우에는 권한 요청이 필요하지 않을 수 있습니다. 보호된 리소스에 액세스하지만 필요한 권한을 요청하지 않는 코드는 실행될 수 있지만, 필요한 권한이 없는 리소스에 액세스하려고 하면 실행 도중 특정 위치에서 실패할 수 있습니다.

권한을 요청하려면 코드가 사용하는 리소스와 보호된 작업을 알고 있어야 하며 이와 같은 리소스와 작업을 보호하는 권한도 알고 있어야 합니다. 또한, 구성 요소가 호출하는 클래스 라이브러리 메서드가 액세스하는 리소스도 추적해야 합니다. .NET Framework에 포함된 코드 액세스 권한의 목록을 보려면 권한 항목을 참조하십시오.

다음은 권한 요청의 유형을 설명하는 표입니다.

권한 요청

설명

최소 권한(RequestMinimum)

실행에 필요한 코드의 권한

선택적 권한(RequestOptional)

코드가 사용할 수 있는 권한. 이 권한이 없어도 효율적으로 실행될 수 있습니다. 이 요청은 특별히 요청되지 않은 다른 모든 권한을 암시적으로 거부합니다.

거부된 권한(RequestRefuse)

보안 정책에서 허용하는 경우에도 확인하려는 권한이 코드에 부여되지 않습니다.

기본 제공 권한 집합에 대한 위의 요청 중 일부를 수행(기본 제공 권한 집합 요청).

Nothing, Execution, FullTrust, Internet, LocalIntranetSkipVerification 등의 기본 제공 권한 집합

XML로 인코딩된 권한 집합에 대한 위의 요청 중 일부를 수행(XML로 인코딩된 권한 요청).

원하는 권한 집합의 XML 표현(XML로 인코딩된 권한 집합이 포함된 문자열 또는 인코딩된 권한 집합이 포함된 XML 파일의 위치)

RequestMinimum을 사용하여 필요한 권한을 지정하면 보안 정책에서 허용하는 필요한 각각의 권한이 코드에 부여됩니다. 필요한 모든 권한이 코드에 부여되어야만 코드가 실행될 수 있습니다.

필요한 권한을 요청하지 않고 선택적 권한을 요청하면, 경우에 따라 어셈블리에 부여된 권한이 상당히 제한될 수 있습니다. 예를 들어, 일반적으로 보안 정책은 Everything으로 지정된 권한 집합과 연결된 권한을 Assembly A에 부여합니다. Assembly A의 개발자가 Permission A만 선택적으로 요청하고 필요한 권한은 요청하지 않으면, Assembly A에는 Permission A가 부여되거나(보안 정책에서 허용하는 경우) 권한이 전혀 부여되지 않습니다.

표시: