보안 정책 이해Understanding Security Policies

보고서 서버에 의해 실행되는 모든 코드는 특정 코드 액세스 보안 정책의 일부여야 합니다.Any code that is executed by a report server must be part of a specific code access security policy. 이러한 보안 정책은 증명 정보를 일련의 명명된 권한 집합에 매핑하는 코드 그룹으로 구성됩니다.These security policies consist of code groups that map evidence to a set of named permission sets. 코드 그룹은 해당 그룹의 코드에 대해 허용 가능한 권한을 지정하는 명명된 권한 집합과 연결되어 있는 경우가 많습니다.Often, code groups are associated with a named permission set that specifies the allowable permissions for code in that group. 런타임은 신뢰할 수 있는 호스트 또는 로더가 제공하는 증명 정보를 사용하여 코드가 속하는 코드 그룹을 결정하고 이에 따라 코드에 부여할 권한을 결정합니다.The runtime uses evidence provided by a trusted host or by the loader to determine which code groups the code belongs to and, therefore, which permissions to grant the code. Reporting ServicesReporting ServicesMicrosoftMicrosoft .NET Framework.NET Framework CLR(공용 언어 런타임)에 의해 정의된 대로 이 보안 정책 아키텍처를 따릅니다. adheres to this security policy architecture as defined by the MicrosoftMicrosoft .NET Framework.NET Framework common language runtime (CLR). 다음 섹션에서는 Reporting ServicesReporting Services의 다양한 코드 유형 및 이와 연결된 정책 규칙에 대해 설명합니다.The following sections describe the various types of code in Reporting ServicesReporting Services and the policy rules associated with them.

보고서 서버 어셈블리Report Server Assemblies

보고서 서버 어셈블리는 Reporting ServicesReporting Services 제품의 일부인 코드를 포함하는 어셈블리입니다.Report server assemblies are those that contain code that is part of the Reporting ServicesReporting Services product. Reporting ServicesReporting Services는 관리 코드 어셈블리를 사용하여 작성됩니다. 이러한 모든 어셈블리에는 강력한 이름이 지정(디지털로 서명)됩니다. is written using managed code assemblies; all of these assemblies are strong-named (that is, digitally signed). 이러한 어셈블리에 대한 코드 그룹은 어셈블리의 강력한 이름에 대한 공개 키 정보를 기반으로 증명 정보를 제공하는 StrongNameMembershipCondition을 사용하여 정의됩니다.The code groups for these assemblies are defined using the StrongNameMembershipCondition, which provides evidence based on public key information for the assembly's strong name. 코드 그룹에는 FullTrust 권한 집합이 부여됩니다.The code group is granted the FullTrust permission set.

보고서 서버 확장 프로그램(렌더링, 데이터, 배달 및 보안)Report Server Extensions (Rendering, Data, Delivery, and Security)

보고서 서버 확장 프로그램은 Reporting ServicesReporting Services의 기능을 확장하기 위해 만드는 사용자 지정 데이터, 배달, 렌더링 및 보안 확장 프로그램입니다.Report server extensions are custom data, delivery, rendering, and security extensions that you or other third-parties create in order to extend the functionality of Reporting ServicesReporting Services. 확장하는 Reporting ServicesReporting Services 구성 요소와 연결된 정책 구성 파일에서 이러한 확장 프로그램 또는 어셈블리 코드에 FullTrust를 부여해야 합니다.You must grant FullTrust to these extensions or assembly code in the policy configuration files associated with the Reporting ServicesReporting Services component you are extending. Reporting ServicesReporting Services의 일부로 제공되는 확장 프로그램은 보고서 서버 공개 키로 서명되며 FullTrust 권한 집합을 받습니다.Extensions shipped as a part of Reporting ServicesReporting Services are signed with the report server public key and receive the FullTrust permission set.

중요

타사 확장 프로그램에 대해 FullTrust를 허용하려면 Reporting ServicesReporting Services 정책 구성 파일을 수정해야 합니다.You must modify the Reporting ServicesReporting Services policy configuration files to allow FullTrust for any third-party extensions. 사용자 지정 확장 프로그램에 대해 FullTrust가 있는 코드 그룹을 추가하지 않으면 해당 확장 프로그램을 보고서 서버에서 사용할 수 없습니다.If you do not add a code group with FullTrust for your custom extensions, they cannot be used by the report server.

Reporting ServicesReporting Services의 정책 구성 파일에 대한 자세한 내용은 Reporting Services 보안 정책 파일 사용을 참조하세요.For more information about the policy configuration files in Reporting ServicesReporting Services, see Using Reporting Services Security Policy Files.

보고서에 사용되는 식Expressions Used in Reports

보고서 식은 보고서 정의 언어 파일의 Code 요소 내에 포함된 인라인 코드 식 또는 사용자 정의 메서드입니다.Report expressions are inline code expressions or user-defined methods contained within the Code element of a report definition language file. 기본적으로 Execution 권한 집합을 이러한 식에 부여하는 코드 그룹이 정책 파일에 이미 구성되어 있습니다.There is a code group that is already configured in the policy files that grants these expressions the Execution permission set by default. 코드 그룹은 다음과 같습니다.The code group looks like the following:

<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>  

Execution 권한을 사용하면 코드를 실행할 수 있지만 보호된 리소스는 사용할 수 없습니다.Execution permission allows code to run (execute), but not to use protected resources. 보고서 내의 모든 식은 컴파일된 보고서의 일부로 저장되는 어셈블리("식 호스트" 어셈블리)로 컴파일됩니다.All expressions found within a report are compiled into an assembly (called an "expression host" assembly) that is stored as a part of the compiled report. 보고서가 실행되면 보고서 서버는 식 호스트 어셈블리를 로드하고 해당 어셈블리를 호출하여 식을 실행합니다.When the report is executed, the report server loads the expression host assembly and makes calls into that assembly to execute expressions. 식 호스트 어셈블리는 모든 식 호스트에 대한 코드 그룹을 정의하는 데 사용되는 특정 키로 서명됩니다.Expression host assemblies are signed with a specific key that is used to define the code group for all expression hosts.

보고서 식은 보고서 개체 모델 컬렉션(필드, 매개 변수 등)을 참조하고 산술 및 문자열 연산과 같은 간단한 태스크를 수행합니다.Report expressions reference report object model collections (fields, parameters, etc.) and perform simple tasks like arithmetic and string operations. 이러한 간단한 연산을 수행하는 코드에는 Execution 권한만 필요합니다.Code that performs these simple operations only requires Execution permission. 기본적으로 Reporting ServicesReporting Services에서 Code 요소의 사용자 정의 메서드 및 모든 사용자 지정 어셈블리에는 Execution 권한이 부여됩니다.By default, user-defined methods in the Code element and any custom assemblies are granted Execution permission in Reporting ServicesReporting Services. 따라서 대부분의 식에서는 현재 구성에서 보안 정책 파일을 수정하지 않아도 됩니다.Thus, for most expressions, the current configuration does not require that you modify any security policy files. 식 호스트 어셈블리에 추가 권한을 부여하려면 관리자가 보고서 서버 및 보고서 디자이너의 정책 구성 파일을 수정하고 보고서 식 코드 그룹을 변경해야 합니다.To grant additional permissions to expression host assemblies, an administrator needs to modify the policy configuration files of the report server and Report Designer, and change the report expressions code group. 이는 전역 설정이므로 식 호스트에 대한 기본 권한을 변경하면 모든 보고서가 영향을 받습니다.Because it is a global setting, changing default permissions for the expression hosts affects all reports. 이러한 이유로 추가 보안이 필요한 모든 코드를 사용자 지정 어셈블리에 저장하는 것이 좋습니다.For this reason, it is highly recommended that you place all code that requires additional security into a custom assembly. 그러면 이 어셈블리에만 사용자에게 필요한 권한이 부여됩니다.Only this assembly will be granted the permissions you need.

중요

외부 어셈블리 또는 보호된 리소스를 호출하는 코드는 보고서에서 사용할 수 있도록 사용자 지정 어셈블리에 통합되어야 합니다.Code that calls external assemblies or protected resources should be incorporated into a custom assembly for use in reports. 이렇게 하면 코드에 의해 요청 및 어설션되는 권한을 보다 자세히 제어할 수 있습니다.Doing so gives you more control over the permissions requested and asserted by your code. Code 요소 내에서는 보안 메서드를 호출하지 않아야 합니다.You should not make calls to secure methods within the Code element. 이렇게 하려면 보고서 식 호스트에 FullTrust를 부여하고 모든 사용자 지정 코드에 CLR에 대한 모든 액세스 권한을 부여해야 합니다.Doing so requires you to grant FullTrust to the report expression host and grants all custom code full access to the CLR.

주의

보고서 식 호스트에 대한 코드 그룹에 FullTrust를 부여하지 마십시오.Do not grant FullTrust to the code group for a report expression host. 이렇게 하면 모든 보고서 식이 보호된 시스템 호출을 수행할 수 있게 됩니다.If you do, you enable all report expressions to make protected system calls.

보고서에서 참조되는 사용자 지정 어셈블리Custom Assemblies Referenced in Reports

일부 보고서 식은 Reporting ServicesReporting Services에서 사용자 지정 어셈블리라고도 하는 타사 코드 어셈블리를 호출할 수 있습니다.Some report expressions can call third-party code assemblies, also known in Reporting ServicesReporting Services as custom assemblies. 보고서 서버는 정책 구성 파일에서 이러한 어셈블리에 Execution 권한 이상이 있을 것이라고 예상합니다.The report server expects these assemblies to have at least Execution permission in the policy configuration files. 기본적으로 Reporting ServicesReporting Services와 함께 제공되는 정책 파일은 ‘내 컴퓨터’ 영역에서 시작하는 모든 어셈블리에 Execution 권한을 부여합니다.By default, policy files that ship with Reporting ServicesReporting Services grant Execution permission to all assemblies starting from the 'My Computer' zone. 필요에 따라 사용자 지정 어셈블리에 추가 권한을 부여할 수 있습니다.You can grant additional permissions to custom assemblies as needed.

보고서 식에서 특정 코드 권한이 필요한 작업을 수행해야 하는 경우도 있습니다.In some cases, you may need to perform an operation that requires specific code permissions in a report expression. 일반적으로 이는 보고서 식이 보안된 CLR 라이브러리 메서드(예: 파일 또는 시스템 레지스트리에 액세스하는 메서드)를 호출해야 함을 의미합니다.Typically, this means that a report expression needs to make a call to a secured CLR library method (such as one that accesses files or the system registry). 이러한 보안 호출을 실행하는 데 필요한 코드 권한은 .NET Framework.NET Framework 설명서에 나와 있습니다. 호출을 실행하려면 호출 코드에 이러한 특정 보안 권한을 부여해야 합니다.The .NET Framework.NET Framework documentation describes the code permissions that are required to make this secure call; to execute the call, the calling code must be granted these specific, secure permissions. 보고서 식 또는 Code 식에서 호출하는 경우에는 식 호스트 어셈블리에 적절한 권한을 부여해야 합니다.If you make the call from a report expression or the Code element, the expression host assembly must be granted the appropriate permissions. 그러나 식 호스트에 권한을 부여하면 보고서의 모든 식에서 실행되는 모든 코드에 해당 권한이 부여됩니다.However, once you grant the expression host the permissions, all code that runs in any expression in any report is now granted that specific permission. 그러므로 사용자 지정 어셈블리에서 호출하여 해당 사용자 지정 어셈블리에 특정 권한을 부여하는 것이 훨씬 더 안전합니다.It is much more secure to make the call from a custom assembly and grant that custom assembly the specific permissions.

관련 항목:See Also

Reporting Services의 코드 액세스 보안 Code Access Security in Reporting Services
안전한 개발(Reporting Services)Secure Development (Reporting Services)