Visual Basic을 사용한 .NET Framework의 코드 액세스 권한 및 보안
업데이트: 2007년 11월
.NET Framework에서는 코드 액세스 보안을 통해 보호된 리소스와 작업에 대한 코드 액세스를 제한합니다. 공용 언어 런타임 기능이 있는 모든 응용 프로그램은 공용 언어 런타임의 보안 시스템과 상호 작용해야 합니다. 응용 프로그램이 실행될 경우 공용 언어 런타임에 의해 자동으로 평가되어 권한 집합이 부여됩니다. 부여 받은 권한에 따라 응용 프로그램이 제대로 실행될 수도 있고 보안 예외가 생성될 수도 있습니다.
특정 컴퓨터의 로컬 보안 설정에 따라 코드에 부여되는 권한이 결정됩니다. 이러한 설정은 컴퓨터마다 다르므로 실행하기에 충분한 권한이 항상 코드에 부여되는 것은 아닙니다. 자세한 내용은 코드 액세스 보안 기본 사항을 참조하십시오.
코드 액세스 권한
코드 액세스 권한 개체는 리소스 및 작업이 무단으로 사용되지 않도록 보호하는 데 사용됩니다. 이 권한은 공용 언어 런타임에서 관리 코드에 보안 관련 제한 사항을 적용하기 위한 메커니즘에서 기본적인 부분입니다.
코드 액세스 권한을 통해 사용자는 파일과 같이 보호되는 리소스에 액세스하거나 관리 코드에 대한 액세스 같이 보호되는 작업을 수행할 수 있습니다. 모든 코드 액세스 권한은 부여된 권한이 런타임에 의해 결정되는지 여부와 관계없이 코드로 요청할 수 있습니다. 각 코드 액세스 권한은 CodeAccessPermission 클래스에서 파생되므로 권한에는 일반적인 메서드인 Assert, Demand, Deny, PermitOnly, IsSubSetOf, Intersect 및 Union이 있습니다.
.NET Framework에서 제공되는 권한
이 표에서는 .NET Framework에서 제공하는 코드 액세스 권한을 보여 줍니다.
권한 클래스 |
허용 작업 |
---|---|
ASP.NET-호스팅 환경의 리소스에 액세스할 수 있는 권한 |
|
System.DirectoryServices 클래스에 액세스할 수 있는 권한 |
|
네트워크의 DNS(Domain Name System)에 액세스할 수 있는 권한 |
|
환경 변수에서 읽거나 환경 변수에 쓸 수 있는 권한 |
|
이벤트 로그 서비스에서 읽거나 이벤트 로그 서비스에 쓸 수 있는 권한 |
|
열기 대화 상자를 사용하여 파일에서 읽거나 파일에 쓸 수 있는 권한 |
|
파일 또는 디렉터리에서 읽거나 파일 또는 디렉터리에 쓸 수 있는 권한 |
|
격리된 저장소의 파일 또는 디렉터리에서 읽거나 파일 또는 디렉터리에 쓸 수 있는 권한 |
|
MSMQ라고도 하는 관리되는 메시지 큐 인터페이스를 사용하여 메시지 큐에 액세스할 수 있는 권한 |
|
ODBC(Open Database Connectivity) 데이터 소스에 액세스할 수 있는 권한 |
|
OLE DB를 사용하여 데이터베이스에 액세스할 수 있는 권한 |
|
Oracle 데이터베이스에 액세스할 수 있는 권한 |
|
성능 카운터에 액세스할 수 있는 권한 |
|
프린터 액세스 권한 |
|
런타임에 형식에 대한 정보 확인 권한 |
|
레지스트리 키 및 값의 읽기, 쓰기, 만들기 또는 삭제 권한 |
|
실행, 권한 어설션, 비관리 코드로의 호출, 유효성 검사 생략 및 기타 보안 관련 권한 |
|
실행 중이거나 중지된 서비스에 액세스할 수 있는 권한 |
|
전송 주소에 대해 연결을 만들거나 허용할 수 있는 권한 |
|
SQL 데이터베이스에 액세스할 수 있는 권한 |
|
사용자 인터페이스 기능에 액세스할 수 있는 권한 |
|
웹 주소에 대해 연결을 만들거나 허용할 수 있는 권한 |
사용자 정의 권한 만들기
.NET Framework는 .NET Framework에 의해 노출된 리소스를 중심으로, 특정 리소스 및 작업 집합을 보호하도록 설계된 코드 액세스 권한 클래스 집합을 제공합니다. 대부분의 환경에서는 기본 제공 코드 액세스 권한만으로도 충분합니다. 그러나 사용자 고유의 코드 액세스 권한 클래스를 정의하는 것이 좋을 때도 있습니다. 자세한 내용은 사용자 고유의 코드 액세스 권한 만들기를 참조하십시오.
ID 권한
ID 권한은 어셈블리를 식별하는 특징을 나타냅니다. 공용 언어 런타임에서는 입수한 어셈블리에 대한 정보에 따라 어셈블리가 로드될 때 해당 어셈블리에 ID 권한을 부여합니다. 자세한 내용은 ID 권한을 참조하십시오.
역할 기반 권한
종종 업무용 응용 프로그램을 사용하여 사용자가 제공하는 자격 증명에 따라 데이터 또는 리소스에 액세스할 수 있습니다. 일반적으로 이러한 응용 프로그램에서는 사용자의 역할을 확인한 후 해당 역할에 따라 리소스에 대한 액세스 권한을 제공합니다. 공용 언어 런타임에서는 Windows 계정 또는 사용자 지정 ID에 따라 역할 기반 권한을 지원합니다. 자세한 내용은 역할 기반 보안을 참조하십시오.
보안 작업
다음 표에서는 권한 및 보안 관련 작업을 보여 줍니다.
작업 |
참조 |
---|---|
비관리 코드에 액세스하는 권한 요청 |
|
선택적 권한 요청 |
|
명명된 권한 집합에 대한 권한 요청 |
|
XML로 인코딩된 권한 요청 |
|
권한 거부 |
|
간접적인 보안 검사 수행 |
|
선언적 보안 검사 수행 |
|
보안 검사 재정의 |
|
부분 신뢰 코드로 라이브러리 공유 |
|
AllowPartiallyTrustedCallersAttribute 어셈블리의 형식에 대한 완전 신뢰 필요 |
AllowPartiallyTrustedCallersAttribute 어셈블리에서 형식에 대한 완전 신뢰 요청 |
WindowsIdentity 및 WindowsPrincipal 개체 만들기 |
|
GenericPrincipal 및 GenericIdentity 개체 만들기 |
.NET Framework 보안 정책 모델
.NET Framework 보안 정책 모델은 5개의 요소로 구성됩니다. 이러한 요소는 다음과 같습니다.
보안 정책 수준: 엔터프라이즈, 컴퓨터, 사용자 및 응용 프로그램 도메인
엔터프라이즈, 컴퓨터 및 사용자 정책 수준 내의 계층 구조인 코드 그룹
각 코드 그룹과 연결된 명명된 권한 집합
코드 ID에 대한 정보를 제공하는 증명 정보
코드에 대한 증명 정보를 공용 언어 런타임에 제공하는 응용 프로그램 도메인 호스트
보안 정책 수준
.NET Framework는 어셈블리 또는 응용 프로그램 도메인에 부여되는 권한을 산정하는 네 개의 보안 정책 수준을 제공합니다. 각 수준별로 자체 코드 그룹 및 권한 집합의 계층 구조가 있습니다. 런타임에서는 허용되는 권한 집합을 정책에 참여하는 모든 수준에서 허용되는 권한의 합계로 계산합니다.
수준은 다음과 같습니다.
엔터프라이즈 정책. 엔터프라이즈 구성 파일이 배포되는 엔터프라이즈 설정 내의 모든 관리 코드에 적용합니다.
컴퓨터 정책. 컴퓨터의 모든 관리 코드에 적용합니다.
사용자 정책. 공용 언어 런타임이 시작될 때 현재 운영 체제 사용자와 연관된 모든 프로세스 내의 코드에 적용합니다.
응용 프로그램 도메인 정책. 호스트 응용 프로그램 도메인 내의 관리 코드에 적용합니다.
자세한 내용은 보안 정책 수준을 참조하십시오.
코드 그룹
코드 그룹은 멤버 조건이 지정되어 있는 논리적인 코드 그룹입니다. 멤버 자격 조건을 충족시키는 코드는 모두 그룹에 포함됩니다. 코드 그룹에는 정책을 부여하는 동안 평가되는 각 권한 집합이 연결됩니다. 자세한 내용은 코드 그룹을 참조하십시오.
명명된 권한 집합
명명된 권한 집합은 관리자가 코드 그룹에 연결할 수 있는 권한 집합입니다. 명명된 권한 집합은 하나 이상의 권한과 해당 집합의 이름 및 설명으로 구성되어 있습니다. 특정 권한 집합에 둘 이상의 코드 그룹을 연결할 수 있습니다.
이 표에서는 공용 언어 런타임에서 제공하는 명명된 권한 집합을 보여 줍니다.
이름 |
설명 |
---|---|
Nothing |
권한 없음(코드를 실행할 수 없음) |
Execution |
실행 권한은 있지만, 보호된 리소스를 사용할 권한은 없음. |
Internet |
출처를 알 수 없는 콘텐츠에 적합한 기본 정책 권한 집합 |
Local Intranet |
엔터프라이즈 내의 기본 정책 권한 집합 |
Everything |
확인을 건너뛸 권한만을 제외한 모든 표준(기본 제공) 권한 |
FullTrust |
모든 리소스에 대한 모든 액세스 권한 |
자세한 내용은 명명된 권한 집합을 참조하십시오.
증명 정보
증명 정보는 공용 언어 런타임이 보안 정책을 기준으로 결정할 때 사용하는 정보입니다. 증명 정보는 코드의 특징이 특별하다는 것을 공용 언어 런타임에게 알려 주며 응용 프로그램 디렉터리, 게시자, 사이트 및 URL을 포함할 수 있습니다. 자세한 내용은 증명 정보를 참조하십시오.
응용 프로그램 도메인 호스트
각 .NET Framework 응용 프로그램은 응용 프로그램 도메인 내에서 호스트의 제어를 받으며 실행되는데, 이 호스트는 응용 프로그램 도메인을 만들어 이 안으로 어셈블리를 로드합니다. 응용 프로그램 도메인은 다음과 같습니다.
브라우저 호스트. 웹 사이트 컨텍스트 내에서 코드를 실행합니다.
사용자 지정 호스트. 도메인을 만들고 동적 어셈블리를 비롯한 어셈블리를 도메인에 로드합니다.
서버 호스트. 서버에 제출된 요청을 처리하는 코드를 실행합니다.
셸 호스트. 셸에서 응용 프로그램(.exe 파일)을 시작합니다.
이 표에서는 응용 프로그램 도메인과 관련된 작업을 보여 줍니다.
작업 |
참조 |
---|---|
응용 프로그램 도메인 만들기 |
|
응용 프로그램 도메인 수준의 보안 정책 설정 |
|
응용 프로그램 도메인 구성 |
|
특정 응용 프로그램 도메인에서 함수 호출 |
|
응용 프로그램 도메인에서 설치 정보 검색 |
|
응용 프로그램 도메인 언로드 |
자세한 내용은 AppDomain, 응용 프로그램 도메인 호스트 및 응용 프로그램 도메인으로 프로그래밍을 참조하십시오.