Reporting Services의 코드 액세스 보안
코드 액세스 보안은 증명 정보, 코드 그룹 및 명명된 권한 집합 등의 핵심 개념을 기반으로 합니다. Reporting Services에서 보고서 관리자, 보고서 디자이너 및 보고서 서버 구성 요소에는 각각 사용자 지정 어셈블리에 대한 코드 액세스 보안을 구성하는 정책 파일이 있습니다. 또한 이 정책 파일은 데이터, 배달, 렌더링 및 보안 확장 프로그램에 대한 코드 액세스를 구성합니다. 다음 섹션에서는 코드 액세스 보안에 대한 개요를 제공합니다. 이 섹션에서 다루는 문서에 대한 자세한 내용은 Microsoft .NET Framework SDK 설명서의 "보안 정책 모델"을 참조하세요.
Reporting Services는 보고서 서버가 ASP.NET 기술을 기반으로 구축되었지만 일반적인 ASP.NET 애플리케이션과 보고서 서버 간에 상당한 차이가 있기 때문에 코드 액세스 보안을 사용합니다. 일반적인 ASP.NET 애플리케이션은 사용자 코드를 실행하지 않습니다. 반면 Reporting Services는 사용자가 보고서 정의 언어의 Code 요소를 사용하여 보고서 정의 파일에 대해 프로그래밍 작업을 수행하고 보고서에 사용할 특수화된 기능을 사용자 지정 어셈블리로 개발해 넣을 수 있도록 하는 확장 가능한 개방형 아키텍처를 사용합니다. 또한 개발자는 보고서 서버의 기능을 향상시키는 강력한 확장 프로그램을 설계하고 배포할 수 있습니다. 이러한 힘과 유연성은 가능한 한 많은 보호 및 보안을 제공해야 하는 필요성과 함께 제공됩니다.
Reporting Services 개발자는 자신의 보고서에 임의의 .NET Framework 어셈블리를 사용하고 전역 어셈블리 캐시에 배포된 어셈블리의 모든 기능을 기본적으로 호출할 수 있습니다. 보고서 서버에서 제어할 수 있는 유일한 방법은 보고서 식 및 로드된 사용자 지정 어셈블리에 대해 부여되는 권한입니다. Reporting Services에서 사용자 지정 어셈블리에는 기본적으로 실행 전용 권한만 부여됩니다.
증거
증거는 CLR(공용 언어 런타임)이 코드 어셈블리에 대한 보안 정책을 결정하는 데 사용하는 정보입니다. 증명 정보는 코드에 특정한 특징이 있음을 런타임에 알립니다. 일반적인 형태의 증거에는 디지털 서명 및 어셈블리의 위치가 포함됩니다. 애플리케이션에 의미가 있는 다른 정보를 나타내도록 증명 정보를 사용자 지정 설계할 수도 있습니다.
어셈블리와 애플리케이션은 모두 증명 정보를 기반으로 기본 권한을 받습니다. 예를 들어, Reporting Services가 액세스를 시도하는 어셈블리의 위치는 짧은 이름이 지정된 어셈블리의 일반적인 증거 형식입니다. 이 예제를 URL 증명 정보라고 합니다. 보고서 서버에 배포된 사용자 지정 데이터 처리 확장 프로그램에 대한 URL 증명 정보일 C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.FsiDataExtension.dll
수 있습니다. 어셈블리의 강력한 이름 또는 디지털 서명은 또 다른 일반적인 형태의 증거입니다. 이 경우 증거는 어셈블리에 대한 공개 키 정보입니다.
코드 그룹
코드 그룹은 멤버 자격에 대해 지정된 조건이 있는 코드의 논리적 그룹입니다. 멤버 자격 조건을 충족하는 모든 코드가 그룹에 포함됩니다. 관리주체는 코드 그룹 및 관련 권한 집합을 관리하여 보안 정책을 구성합니다.
코드 그룹의 멤버 자격 조건은 증명 정보를 기반으로 합니다. 예를 들어 코드 그룹의 URL 멤버 자격은 URL 증명 정보를 기반으로 합니다. CLR(공용 언어 런타임)은 URL 증명 정보와 같은 식별 특징을 사용하여 코드를 설명하고 그룹의 멤버 자격 조건이 충족되는지 여부를 확인합니다. 예를 들어 코드 그룹의 멤버 자격 조건이 "어셈블리 C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.FsiDataExtension.dll의 코드"인 경우 런타임은 증거를 검사하여 코드가 해당 위치에서 시작되었는지 여부를 확인합니다. 이러한 유형의 코드 그룹에 대한 구성 항목의 예는 다음 예제와 같을 수 있습니다.
<CodeGroup class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust"
Name="MyCodeGroup"
Description="Code group for my data processing extension">
<IMembershipCondition class="UrlMembershipCondition"
version="1"
Url="C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.FsiDataExtension.dll"
/>
</CodeGroup>
시스템 관리자 또는 애플리케이션 배포 전문가와 협력하여 사용자 지정 어셈블리 또는 Reporting Services 확장 프로그램에 필요한 유형의 코드 액세스 보안 및 코드 그룹을 확인해야 합니다.
명명된 권한 집합
명명된 권한 집합은 관리자가 코드 그룹에 연결할 수 있는 권한 집합입니다. 대부분의 명명된 권한 집합은 하나 이상의 권한, 이름 및 해당 권한 집합에 대한 설명으로 구성됩니다. 관리 담당자는 명명된 권한 집합을 사용하여 코드 그룹에 대한 보안 정책을 설정하거나 수정할 수 있습니다. 둘 이상의 코드 그룹을 이름이 같은 명명된 권한 집합에 연결할 수 있습니다. CLR은 Nothing, Execution, Internet, LocalIntranet, Everything 및 FullTrust와 같은 명명된 기본 제공 권한 집합을 제공합니다.
참고 항목
Reporting Services의 사용자 지정 데이터, 배달, 렌더링 및 보안 확장 프로그램은 FullTrust 권한 세트로 실행해야 합니다. 시스템 관리자와 협력하여 Reporting Services 확장 프로그램에 적합한 코드 그룹 및 멤버 자격 조건을 추가합니다.
사용하는 사용자 지정 어셈블리에 대한 고유한 사용자 지정 권한 수준을 보고서에 연결할 수 있습니다. 예를 들어 어셈블리가 특정 파일에 액세스하도록 허용하려면 특정 파일 I/O 액세스를 사용하여 명명된 새 권한 집합을 만든 다음, 사용 권한 집합을 코드 그룹에 할당할 수 있습니다. 다음 권한 집합은 MyFile.xml 파일에 대한 읽기 전용 액세스 권한을 부여합니다.
<PermissionSet class="NamedPermissionSet"
version="1"
Name="MyNewFilePermissionSet"
Description="A special permission set that grants read access to my file.">
<IPermission class="FileIOPermission"
version="1"
Read="C:\MyFile.xml"/>
<IPermission class="SecurityPermission"
version="1"
Flags="Assertion, Execution"/>
</PermissionSet>
이 권한 집합을 부여하는 코드 그룹은 다음 예제와 같이 표시될 수 있습니다.
<CodeGroup class="UnionCodeGroup"
version="1"
PermissionSetName="MyNewFilePermissionSet"
Name="MyNewCodeGroup"
Description="A special code group for my custom assembly.">
<IMembershipCondition class="UrlMembershipCondition"
version="1"
Url="C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\MyCustomAssembly.dll"/>
</CodeGroup>