다음을 통해 공유


보안 검사 재정의

일반적으로 보안 검사는 호출 스택에 있는 모든 호출자를 검사하여 지정된 권한이 각 호출자에게 부여되어 있는지 확인합니다. 그러나 Assert, Deny 또는 PermitOnly를 개별 권한 개체나 권한 집합 개체에서 호출하여 보안 검사 결과를 재정의할 수 있습니다. 스택에 있는 모든 호출자의 권한을 검사하지 않는 경우에도 이 메서드 중에서 호출되는 메서드에 따라 보안 검사에서 성공하거나 실패하게 됩니다.

중요중요

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

한 메서드가 다른 메서드를 호출할 때마다 새 프레임이 호출 스택에 생성되어 호출되는 메서드의 정보를 저장합니다. 생성자를 사용하여 속성에 액세스하는 것은 이 컨텍스트에서는 메서드 호출에 해당합니다. 각 스택 프레임에는 메서드가 Assert, Deny 또는 PermitOnly를 호출한 정보가 들어 있습니다. 호출자가 둘 이상의 Assert, Deny 또는 PermitOnly를 한 메서드 호출에서 사용하면 공용 언어 런타임은 재정의 동작에 영향을 미치는 다음과 같은 처리 규칙을 적용합니다.

  • 스택 워크 동안 하나의 스택 프레임에 동일한 형식이 두 번(Assert에 대한 두 번의 호출) 이상 재정의된 것을 공용 언어 런타임이 발견하면 두 번째 재정의에 의해 예외가 throw됩니다.

  • 한 스택 프레임에 다른 재정의가 있으면 공용 언어 런타임은 PermitOnly, Deny, Assert의 순서로 이러한 재정의를 처리합니다.

재정의를 바꾸려면 우선 적절한 되돌리기 메서드(예: RevertAssert)를 호출한 다음 새로운 재정의를 적용합니다.

참고참고

클래스 생성자 코드는 특정 위치나 특정 컨텍스트에서 실행된다고 보장할 수 없으므로 클래스 생성자에서 스택 워크 재정의가 이루어지면 안 됩니다.클래스 생성자의 호출 스택 상태는 명확하게 정의되지 않으므로 생성자에 있는 스택 워크 재정의에 의해 예기치 않은 또는 원하지 않은 결과가 나타날 수 있습니다.

응용 프로그램 개발자도 Assert, Deny 또는 PermitOnly를 자주 사용하지는 않지만 구성 요소 및 클래스 라이브러리 개발자는 거의 사용하지 않습니다. 그러나 보안 재정의가 적합한 경우도 있는데, 이에 대해서는 Assert, DenyPermitOnly 항목에서 설명합니다.

참고참고

재정의(Deny, Assert 또는 PermitOnly)를 수행하는 경우 권한을 되돌려 놓아야만 같은 스택 프레임(메서드)에 있는 같은 종류의 재정의를 수행할 수 있습니다.그렇지 않으면 SecurityException이 throw됩니다.예를 들어, 권한 P를 거부할 경우 이 권한을 되돌려 놓아야만 같은 메서드에서 다른 권한 Q를 거부할 수 있습니다.

재정의를 되돌리려면 다음 표에 나열된 정적 메서드 중 하나를 사용하십시오.

메서드

메서드 작업

CodeAccessPermission.RevertAll

현재 프레임의 모든 이전 재정의가 제거되어 더 이상 적용되지 않습니다.

CodeAccessPermission.RevertAssert

현재 프레임의 이전 Assert가 제거되어 더 이상 적용되지 않습니다.

CodeAccessPermission.RevertDeny

현재 프레임의 이전 Deny가 제거되어 더 이상 적용되지 않습니다. 이 메서드는 .NET Framework 4에서 사용되지 않습니다.

CodeAccessPermission.RevertPermitOnly

현재 프레임의 이전 PermitOnly가 제거되어 더 이상 적용되지 않습니다.

참고 항목

참조

Assert 메서드 사용

Deny 메서드 사용

PermitOnly 메서드 사용

개념

코드 액세스 보안

보안 클래스 라이브러리 작성