보안 정책 이해

보고서 서버가 실행하는 모든 코드는 특정 코드 액세스 보안 정책의 일부여야 합니다. 이러한 보안 정책은 명명된 권한 집합 집합에 증거를 매핑하는 코드 그룹으로 구성됩니다. 코드 그룹은 종종 해당 그룹의 코드에 대해 허용 가능한 권한을 지정하는 명명된 권한 집합과 연결됩니다. 런타임은 신뢰할 수 있는 호스트 또는 로더가 제공한 증명 정보를 사용하여 코드가 속한 코드 그룹 및 코드를 부여할 권한을 결정합니다. Reporting Services는 Microsoft .NET Framework CLR(공용 언어 런타임)에 의해 정의된 대로 이 보안 정책 아키텍처를 따릅니다. 다음 섹션에서는 Reporting Services의 다양한 코드 유형 및 이와 연결된 정책 규칙에 대해 설명합니다.

보고서 서버 어셈블리

보고서 서버 어셈블리에는 Reporting Services 제품의 일부인 코드가 포함되어 있습니다. Reporting Services는 관리 코드 어셈블리를 사용하여 작성됩니다. 이러한 모든 어셈블리에는 강력한 이름이 지정(디지털로 서명)됩니다. 이러한 어셈블리에 대한 코드 그룹은 어셈블리의 강력한 이름에 대한 공개 키 정보를 기반으로 하는 증거를 제공하는 StrongNameMembershipCondition을 사용하여 정의됩니다. 코드 그룹에는 FullTrust 권한 집합이 부여됩니다.

보고서 서버 확장(렌더링, 데이터, 배달 및 보안)

보고서 서버 확장 프로그램은 Reporting Services의 기능을 확장하기 위해 만드는 사용자 지정 데이터, 배달, 렌더링 및 보안 확장 프로그램입니다. 확장 중인 Reporting Services 구성 요소와 연결된 정책 구성 파일에서 이러한 확장 또는 어셈블리 코드에 FullTrust를 부여해야 합니다. Reporting Services의 일부로 제공되는 확장 프로그램은 보고서 서버 공개 키로 서명되며 FullTrust 권한 세트를 받습니다.

Important

타사 확장 프로그램에 대해 FullTrust를 허용하려면 Reporting Services 정책 구성 파일을 수정해야 합니다. 사용자 지정 확장에 대해 FullTrust가 있는 코드 그룹을 추가하지 않으면 보고서 서버에서 사용할 수 없습니다.

Reporting Services의 정책 구성 파일에 대한 자세한 내용은 Reporting Services 보안 정책 파일 사용을 참조 하세요.

보고서에 사용되는 식

보고서 식은 보고서 정의 언어 파일의 Code 요소 내에 포함된 인라인 코드 식 또는 사용자 정의 메서드입니다. 정책 파일에는 이러한 식 에 기본적으로 설정된 실행 권한을 부여하는 코드 그룹이 이미 구성되어 있습니다. 코드 그룹은 다음 예제와 같습니다.

<CodeGroup  
   class="UnionCodeGroup"  
   version="1"  
   PermissionSetName="Execution"  
   Name="Report_Expressions_Default_Permissions"  
   Description="This code group grants default permissions for code in report expressions and Code element. ">  
    <IMembershipCondition  
       class="StrongNameMembershipCondition"  
       version="1"  
       PublicKeyBlob="002400..."  
    />  
</CodeGroup>  

실행 권한을 사용하면 코드가 실행(실행)되지만 보호된 리소스는 사용할 수 없습니다. 보고서 내의 모든 식은 컴파일된 보고서의 일부로 저장되는 어셈블리("식 호스트" 어셈블리)로 컴파일됩니다. 보고서가 실행되면 보고서 서버는 식 호스트 어셈블리를 로드하고 해당 어셈블리를 호출하여 식을 실행합니다. 식 호스트 어셈블리는 모든 식 호스트에 대한 코드 그룹을 정의하는 데 사용되는 특정 키로 서명됩니다.

보고서 식은 보고서 개체 모델 컬렉션(필드, 매개 변수 등)을 참조하고 산술 및 문자열 작업과 같은 간단한 작업을 수행합니다. 이러한 간단한 작업을 수행하는 코드에는 실행 권한만 필요합니다. 기본적으로 Reporting Services에서 Code 요소의 사용자 정의 메서드 및 모든 사용자 지정 어셈블리에는 Execution 권한이 부여됩니다. 따라서 대부분의 식에서 현재 구성에서는 보안 정책 파일을 수정할 필요가 없습니다. 식 호스트 어셈블리에 대한 추가 권한을 부여하려면 관리자가 보고서 서버의 정책 구성 파일을 수정하고 보고서 디자이너 보고서 식 코드 그룹을 변경해야 합니다. 전역 설정이므로 식 호스트에 대한 기본 사용 권한을 변경하면 모든 보고서에 영향을 줍니다. 이러한 이유로 추가 보안이 필요한 모든 코드를 사용자 지정 어셈블리에 배치해야 합니다. 이 어셈블리에만 필요한 권한이 부여됩니다.

Important

외부 어셈블리 또는 보호된 리소스를 호출하는 코드는 보고서에서 사용할 수 있도록 사용자 지정 어셈블리에 통합되어야 합니다. 이렇게 하면 코드에서 요청 및 어설션된 권한을 더 잘 제어할 수 있습니다. Code 요소 내에서 보안 메서드를 호출해서는 안 됩니다. 이렇게 하려면 보고서 식 호스트에 FullTrust를 부여하고 모든 사용자 지정 코드에 CLR에 대한 모든 액세스 권한을 부여해야 합니다.

주의

보고서 식 호스트에 대한 코드 그룹에 FullTrust를 부여하지 마세요. 이렇게 하면 모든 보고서 식이 보호된 시스템 호출을 수행하도록 설정합니다.

보고서에서 참조되는 사용자 지정 어셈블리

일부 보고서 식은 Reporting Services에서 사용자 지정 어셈블리라고도 하는 다른 코드 어셈블리를 호출할 수 있습니다. 보고서 서버는 이러한 어셈블리에 정책 구성 파일의 실행 권한이 있어야 합니다. 기본적으로 Reporting Services와 함께 제공되는 정책 파일은 ‘내 컴퓨터’ 영역에서 시작하는 모든 어셈블리에 Execution 권한을 부여합니다. 필요에 따라 사용자 지정 어셈블리에 추가 권한을 부여할 수 있습니다.

경우에 따라 보고서 식에서 특정 코드 권한이 필요한 작업을 수행해야 할 수 있습니다. 일반적으로 이 시나리오는 보고서 식이 보안 CLR 라이브러리 메서드(예: 파일 또는 시스템 레지스트리에 액세스하는 메서드)를 호출해야 함을 의미합니다. .NET Framework 설명서에서는 이 보안 호출에 필요한 코드 권한을 설명합니다. 호출을 실행하려면 호출 코드에 이러한 특정 보안 권한이 부여되어야 합니다. 보고서 식 또는 Code 식에서 호출하는 경우에는 식 호스트 어셈블리에 적절한 권한을 부여해야 합니다. 그러나 식 호스트에 사용 권한을 부여하면 보고서의 모든 식에서 실행되는 모든 코드에 해당 특정 권한이 부여됩니다. 사용자 지정 어셈블리에서 호출하고 해당 사용자 지정 어셈블리에 특정 권한을 부여하는 것이 훨씬 더 안전합니다.