사용자 지정 어셈블리에서 권한 어설션
기본적으로 사용자 지정 어셈블리 코드는 제한된 Execution 권한 집합으로 실행됩니다. 경우에 따라 보안 시스템 내에서 보호된 리소스(파일, 레지스트리 등)에 대한 보안 호출을 하는 사용자 지정 어셈블리를 구현하고자 할 수 있습니다. 이렇게 하려면 다음 작업을 수행해야 합니다.
코드에서 보안 호출을 하는 데 필요한 정확한 권한을 식별합니다. 이 메서드가 Microsoft.NET Framework 라이브러리의 일부인 경우 이 정보는 메서드 설명서에 포함되어 있습니다.
사용자 지정 어셈블리에 필요한 권한을 부여하기 위해 보고서 서버 정책 구성 파일을 수정합니다. 보안 정책 구성 파일에 대한 자세한 내용은 Reporting Services 보안 정책 파일 사용을 참조하십시오.
필요한 권한을 보안 호출이 이루어지는 메서드의 일부로 어설션합니다. 보고서 서버에서 호출되는 사용자 지정 어셈블리 코드는 보고서 식 호스트 어셈블리의 일부로서 기본적으로 Execution 권한을 사용하여 실행되므로 이 작업이 필요합니다. Execution 권한 집합을 통해 코드를 실행할 수 있지만 보호된 리소스는 사용할 수 없습니다.
강력한 이름으로 서명된 경우 사용자 지정 어셈블리를 AllowPartiallyTrustedCallersAttribute로 표시합니다. 사용자 지정 어셈블리는 기본적으로 FullTrust가 부여되지 않는(즉, "부분적으로 신뢰할 수 있는" 호출자) 보고서 식 호스트 어셈블리의 일부인 보고서 식에서 호출되므로 이 작업이 필요합니다. 자세한 내용은 강력한 이름의 사용자 지정 어셈블리 사용을 참조하십시오.
보안 호출 구현
정책 구성 파일을 수정하여 어셈블리별 권한을 부여할 수 있습니다. 예를 들어, 통화 변환을 처리하도록 사용자 지정 어셈블리를 작성하는 경우 파일에서 현재 통화 환율을 읽어야 합니다. 환율 정보를 검색하려면 어셈블리에 대한 권한 집합에 추가 보안 권한 FileIOPermission을 추가해야 합니다. 정책 구성 파일에서 다음 추가 항목을 입력할 수 있습니다.
<PermissionSet class="NamedPermissionSet"
version="1"
Name="CurrencyRatesFilePermissionSet"
Description="A special permission set that grants read access to my currency rates file.">
<IPermission class="FileIOPermission"
version="1"
Read="C:\CurrencyRates.xml"/>
<IPermission class="SecurityPermission"
version="1"
Flags="Execution, Assertion"/>
</PermissionSet>
그런 다음 해당 권한 집합을 참조하는 코드 그룹을 추가합니다.
<CodeGroup class="UnionCodeGroup"
version="1"
PermissionSetName="CurrencyRatesFilePermissionSet"
Name="MyNewCodeGroup"
Description="A special code group for my custom assembly.">
<IMembershipCondition class="UrlMembershipCondition"
version="1"
Url="C:\Program Files\Microsoft SQL Server\MSSQL\Reporting Services\ReportServer\bin\CurrencyConversion.dll"/>
</CodeGroup>
코드에 올바른 권한이 부여되려면 사용자 지정 어셈블리 코드 내에서 권한을 어설션해야 합니다. 예를 들어, XML 파일 C:\CurrencyRates.xml에 읽기 전용 액세스 권한을 추가하려면 다음 코드를 메서드에 추가해야 합니다.
// C#
FileIOPermission permission = new FileIOPermission(FileIOPermissionAccess.Read, @"C:\CurrencyRates.xml");
try
{
permission.Assert();
// Load the XML currency rates file
XmlDocument doc = new XmlDocument();
doc.Load(@"C:\CurrencyRates.xml");
...
또한 어설션을 메서드 특성 형태로 추가할 수도 있습니다.
[FileIOPermissionAttribute(SecurityAction.Assert, Read=@"C:\CurrencyRates.xml")]
자세한 내용은 .NET Framework 개발자 가이드의 ".NET Framework Security(.NET Framework 보안)"를 참조하십시오.