보안 권한

공용 언어 런타임을 사용하면 코드에서 수행 권한이 있는 작업만 수행되도록 할 수 있습니다. 런타임에서는 권한이라는 개체를 사용하여 관리 코드에 제한 사항을 적용합니다. 런타임에서는 일부 네임스페이스에 기본 권한 클래스를 제공하며, 사용자 지정 권한 클래스의 디자인 및 구현도 지원합니다.

다음 두 종류의 권한이 있으며, 각 권한마다 특정 목적이 있습니다.

  • 코드 액세스 권한은 보호되는 리소스에 액세스하거나 보호되는 작업을 수행하는 기능을 제공합니다.

  • 역할 기반 보안 권한은 사용자(또는 사용자를 대신하는 에이전트)가 특정 ID를 갖는지 또는 지정된 역할의 멤버인지를 확인하기 위한 메커니즘을 제공합니다. PrincipalPermission이 유일한 역할 기반 보안 권한입니다.

보안 권한은 권한 클래스(명령적 보안) 또는 권한 클래스를 나타내는 특성(선언적 보안) 형태일 수 있습니다. 보안 권한의 기본 클래스는 System.Security.CodeAccessPermission입니다. 보안 권한 특성의 기본 클래스는 System.Security.Permissions.CodeAccessSecurityAttribute입니다.

응용 프로그램은 어셈블리의 형태로 응용 프로그램 도메인에 로드될 때 일련의 권한이 부여됩니다. 이러한 권한은 일반적으로 SecurityManager.GetStandardSandbox 메서드로 결정된 미리 정의된 권한 집합을 사용하여 부여됩니다. 권한 부여 설정에 따라 코드에서 사용 가능한 권한이 결정됩니다. 런타임에서는 코드의 원래 위치(예: 로컬 컴퓨터, 로컬 인트라넷 또는 인터넷)에 따라 권한을 부여합니다. 또한 코드가 샌드박스에 로드될 경우에는 코드에 특별한 권한을 부여할 수 있습니다. 샌드박스에서 코드를 실행하는 방법에 대한 자세한 내용은 방법: 샌드박스에서 부분 신뢰 코드 실행을 참조하십시오.

사용 권한의 기본적인 용도는 다음과 같습니다.

  • 라이브러리 코드에서 해당 호출자가 특정 권한을 가지도록 요청할 수 있습니다. 코드의 권한에 대해 Demand를 적용하면 이 코드를 사용하는 모든 코드에 해당 사용 권한이 있어야만 실행됩니다. 요청을 사용하여 호출자가 특정 리소스에 액세스할 수 있는지 여부를 확인하거나 호출자의 ID를 검색할 수 있습니다.

  • 코드에서 권한을 사용하여 보호하려는 리소스에 대한 액세스를 거부할 수 있습니다. SecurityAction.PermitOnly를 사용하여 제한된 권한 집합을 지정하여 다른 모든 권한은 암시적으로 거부할 수 있습니다. 그러나 의도적인 남용으로부터 보호하기 위해 액세스를 차단할 때는 PermitOnly를 사용하지 않는 것이 좋습니다. 권한 부여 설정에 암시적으로 거부된 권한이 있는 호출된 어셈블리는 사용하려는 모든 권한에 대해 SecurityAction.Assert를 수행하여 거부된 권한을 재정의할 수 있습니다. 예를 들어 UIPermission만 허용하고 본질적으로 FileIOPermission을 포함하는 어셈블리를 호출한 경우, 어셈블리는 FileIOPermission에 대해 단순히 Assert를 수행하고 파일 작업을 수행할 수 있습니다. 참조된 어셈블리의 신뢰할 수 없는 코드로부터 리소스를 안전하게 보호하는 유일한 방법은 해당 권한을 포함하지 않는 권한 부여 설정으로 코드를 실행하는 것입니다.

참고 항목

개념

코드 액세스 권한

역할 기반 보안 권한

기타 리소스

주요 보안 개념