다음을 통해 공유


클래스 및 멤버 범위와 함께 사용되는 선언적 보안

업데이트: 2007년 11월

선언적 보안은 클래스, 멤버 및 중첩 클래스에서 수행될 수 있습니다. 이 단원에서는 같은 클래스의 여러 수준에 적용될 경우 선언적 보안을 평가하는 데 사용되는 규칙을 간단하게 설명합니다.

클래스, 멤버 및 선언적 보안

클래스 수준 및 메서드 수준에서 모두 같은 보안 동작에 대한 선언적 보안이 있는 경우 선언적 보안은 다음 테이블에 따라 적용됩니다.

보안 동작

.NET Framework 버전 1.0 및 1.1 동작

NET Framework 버전 2.0 동작

Demand

메서드 수준 특성이 클래스 수준 특성을 재정의합니다. 선언적 요청이 메서드 수준에 있으면 클래스 수준의 선언적 요청은 무시됩니다.

메서드 수준 특성과 클래스 수준 특성이 두 수준에 대해 설정된 하나의 권한으로 통합됩니다.

LinkDemand

메서드 수준 특성과 클래스 수준 특성이 통합됩니다.

동작은 변경되지 않습니다.

InheritanceDemand

클래스 수준 특성은 지정된 권한이 있어야 클래스에서 파생할 수 있습니다.

메서드 수준 특성은 지정된 권한이 있어야 파생된 클래스에 있는 메서드를 재정의할 수 있습니다.

상속 요청은 클래스와 메서드에서 서로 다른 의미를 가지므로 클래스 및 메서드 수준 모두에 독립적으로 선언을 적용할 수 있습니다.

동작은 변경되지 않습니다.

Assert

메서드 수준 특성이 클래스 수준 특성을 재정의합니다.

메서드 수준 특성과 클래스 수준 특성이 두 수준에 대해 설정된 하나의 권한으로 통합됩니다.

Deny

메서드 수준 특성이 클래스 수준 특성을 재정의합니다.

메서드 수준 특성과 클래스 수준 특성이 두 수준에 대해 설정된 하나의 권한으로 통합됩니다.

PermitOnly

메서드 수준 특성이 클래스 수준 특성을 재정의합니다.

메서드 수준 특성과 클래스 수준 특성이 두 수준에 대해 설정된 하나의 권한으로 교차됩니다.

클래스 수준의 요청과 메서드 수준의 어설션이 서로 다른 경우와 같이 보안 동작이 서로 다른 경우에는 상호 작용이 일어나지 않으며 둘 다 평가됩니다.

중첩 클래스 및 선언적 보안

선언적 보안을 클래스에 적용하는 경우 중첩 클래스나 중첩 클래스의 메서드에는 선언적 보안이 전파되지 않습니다. 반대로, 선언적 보안을 중첩 클래스나 중첩 클래스의 메서드에 적용하는 경우에도 부모 클래스에는 선언적 보안이 전파되지 않습니다. 선언적 보안을 중첩 클래스에 적용할 때는 해당 클래스가 개별 클래스인 것처럼 적용해야 합니다.

다음 예제에서는 Main이라는 클래스의 클래스 수준에서 요청되는 가상 권한을 보여 줍니다. 이 클래스에는 Nested라는 중첩 클래스가 정의되어 있습니다. 이 예제에서 중첩 클래스에는 요청이 적용되지 않습니다.

<SomePermissionAttribute(SecurityAction.Demand, Unrestricted:=True)> _
Public Class Main
    ' This nested class is not influenced by the demand.
    Public Class Nested
        ' This method is not influenced by the demand.
        Public Sub MyMethod()
        End Sub
    End Class
End Class
[SomePermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
class Main
{
    // This nested class is not influenced by the demand.
    class Nested
    {
        // This method is not influenced by the demand.
        public void MyMethod()
        {   
        }
    }
}

참고 항목

개념

보안 요청

기타 리소스

코드 액세스 보안