사용자 지정 어셈블리에서 권한 어설션Asserting Permissions in Custom Assemblies

기본적으로 사용자 지정 어셈블리 코드는 제한된 Execution 권한 집합으로 실행됩니다.By default, custom assembly code runs with the limited Execution permission set. 경우에 따라 보안 시스템 내에서 보호된 리소스(파일, 레지스트리 등)에 대한 보안 호출을 하는 사용자 지정 어셈블리를 구현하고자 할 수 있습니다.In some cases, you may wish to implement a custom assembly that makes secured calls to protected resources within your security system (such as a file or the registry). 이렇게 하려면 다음 작업을 수행해야 합니다.In order to accomplish this, you must do the following:

  1. 코드에서 보안 호출을 하는 데 필요한 정확한 권한을 식별합니다.Identify the exact permissions that your code needs in order to make the secured call. 이 메서드가 MicrosoftMicrosoft .NET Framework.NET Framework 라이브러리의 일부인 경우 이 정보는 메서드 설명서에 포함되어 있습니다.If this method is part of a MicrosoftMicrosoft .NET Framework.NET Framework library, this information should be included in the method documentation.

  2. 사용자 지정 어셈블리에 필요한 권한을 부여하기 위해 보고서 서버 정책 구성 파일을 수정합니다.Modify the report server policy configuration files in order to grant the custom assembly the required permissions. 보안 정책 구성 파일에 대한 자세한 내용은 Reporting Services 보안 정책 파일 사용을 참조하세요.For more information about the security policy configuration files, see Using Reporting Services Security Policy Files.

  3. 필요한 권한을 보안 호출이 이루어지는 메서드의 일부로 어설션합니다.Assert the required permissions as part of the method in which the secure call is made. 보고서 서버에서 호출되는 사용자 지정 어셈블리 코드는 보고서 식 호스트 어셈블리의 일부로서 기본적으로 Execution 권한을 사용하여 실행되므로 이 작업이 필요합니다.This is required because the custom assembly code that is called by the report server is part of the report expression host assembly, which runs with Execution permission by default. Execution 권한 집합을 통해 코드를 실행할 수 있지만 보호된 리소스는 사용할 수 없습니다.The Execution permission set enables code to run, but not to use protected resources.

  4. 강력한 이름으로 서명된 경우 사용자 지정 어셈블리를 AllowPartiallyTrustedCallersAttribute로 표시합니다.Mark the custom assembly with AllowPartiallyTrustedCallersAttribute if it is signed with a strong name. 사용자 지정 어셈블리는 기본적으로 FullTrust가 부여되지 않는(즉, "부분적으로 신뢰할 수 있는" 호출자) 보고서 식 호스트 어셈블리의 일부인 보고서 식에서 호출되므로 이 작업이 필요합니다.This is required because custom assemblies are called from a report expression that is part of the report expression host assembly, which, by default, is not granted FullTrust; thus it is a "partially trusted" caller. 자세한 내용은 강력한 이름의 사용자 지정 어셈블리 사용을 참조하세요.For more information, see Using Strong-Named Custom Assemblies.

보안 호출 구현Implementing a Secure Call

정책 구성 파일을 수정하여 어셈블리별 권한을 부여할 수 있습니다.You can modify the policy configuration files to grant your assembly specific permissions. 예를 들어, 통화 변환을 처리하도록 사용자 지정 어셈블리를 작성하는 경우 파일에서 현재 통화 환율을 읽어야 합니다.For example, if you were writing a custom assembly to handle currency conversion, you might need to read the current currency exchange rates from a file. 환율 정보를 검색하려면 어셈블리에 대한 권한 집합에 추가 보안 권한 FileIOPermission을 추가해야 합니다.To retrieve the rate information, you would need to add an additional security permission, FileIOPermission, to your permission set for the assembly. 정책 구성 파일에서 다음 추가 항목을 입력할 수 있습니다.You can make the following additional entry in the policy configuration file:

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

그런 다음 해당 권한 집합을 참조하는 코드 그룹을 추가합니다.You then add a code group that references that permission set:

<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\MSRS10_50.MSSQLSERVER\MSSQL\Reporting Services\ReportServer\bin\CurrencyConversion.dll"/>  
</CodeGroup>  

코드에 올바른 권한이 부여되려면 사용자 지정 어셈블리 코드 내에서 권한을 어설션해야 합니다.In order for your code to acquire the appropriate permission, you must assert the permission within your custom assembly code. 예를 들어, XML 파일 C:\CurrencyRates.xml에 읽기 전용 액세스 권한을 추가하려면 다음 코드를 메서드에 추가해야 합니다.For example, if you want to add read-only access to an XML file, C:\CurrencyRates.xml, you must add the following code to your method:

// 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");  
...  

또한 어설션을 메서드 특성 형태로 추가할 수도 있습니다.You can also add the assertion as a method attribute:

[FileIOPermissionAttribute(SecurityAction.Assert, Read=@"C:\CurrencyRates.xml")]  

자세한 내용은 .NET Framework 개발자 가이드의 ".NET Framework Security(.NET Framework 보안)"를 참조하십시오.For more information, see ".NET Framework Security" in the .NET Framework Developer's Guide.

참고 항목See Also

보고서에서 사용자 지정 어셈블리 사용Using Custom Assemblies with Reports