SharePoint 통합 모드에서 Reporting Services에 RDL 샌드박싱 설정 및 해제

적용 대상: SQL Server Reporting Services(2016) SharePoint Not supported Power BI Report Server

이전 버전의 SSRS(SQL Server Reporting Services)와 관련된 콘텐츠는 SQL Server 2014 Reporting Services를 참조하세요.

RDL(보고서 정의 언어) 샌드박싱 기능을 사용하면 보고서 서버의 단일 웹 팜을 사용하는 여러 테넌트 환경에서 개별 테넌트별로 특정 유형의 리소스 사용을 감지하고 제한할 수 있습니다. 예를 들어 여러 테넌트 및 다른 회사에서 사용하는 보고서 서버의 단일 웹 팜을 기본 수 있는 호스팅 서비스 시나리오가 있습니다. 보고서 서버 관리자는 이 기능을 설정하여 다음과 같이 할 수 있습니다.

  • 외부 리소스 크기를 제한합니다. 외부 리소스에는 이미지, .xslt 파일, 지도 데이터 등이 포함됩니다.

  • 보고서를 게시할 때 식 텍스트에 사용되는 형식 및 멤버를 제한합니다.

  • 보고서를 처리할 때 식의 반환 값 크기와 텍스트 길이를 제한합니다.

참고

SQL Server 2016 이후부터 SharePoint와의 Reporting Services 통합을 사용할 수 없습니다.

RDL 샌드박싱 기능이 설정되면 다음 기능을 사용할 수 없습니다.

  • 보고서 정의 요소의 <Code> 사용자 지정 코드입니다.

  • SQL Server 2005 Reporting Services(SSRS) 사용자 지정 보고서 항목에 대한 RDL 이전 버전과의 호환성 모드

  • 식의 명명된 매개 변수

이 문서에서는 RSReportServer.Config 파일의 요소에 있는 각 요소를 <RDLSandboxing> 설명합니다. 이 파일을 수정하는 방법은 Reporting Services 구성 파일(RSreportserver.config) 수정을 참조하세요. 서버 추적 로그는 RDL 샌드박싱 기능과 관련된 작업을 기록합니다. 추적 로그에 대한 자세한 내용은 보고서 서버 서비스 추적 로그를 참조하세요.

구성 예

다음 예제에서는 RSReportServer.Config 파일의 <RDLSandboxing> 요소에 대한 설정 및 예제 값을 보여 줍니다.

<RDLSandboxing>  
   <MaxExpressionLength>5000</MaxExpressionLength>  
   <MaxResourceSize>5000</MaxResourceSize>  
   <MaxStringResultLength>3000</MaxStringResultLength>  
   <MaxArrayResultLength>250</MaxArrayResultLength>  
   <Types>  
      <Allow Namespace="System.Drawing" AllowNew="True">Bitmap</Allow>  
      <Allow Namespace="TypeConverters.Custom" AllowNew="True">*</Allow>  
   </Types>  
   <Members>  
      <Deny>Format</Deny>  
      <Deny>StrDup</Deny>  
   </Members>  
</RDLSandboxing>  

구성 설정

다음 표에서는 구성 설정 정보를 제공합니다. 설정은 구성 파일에 나타나는 순서로 표시됩니다.

설정 설명
MaxExpressionLength RDL 식에 허용되는 최대 문자 수입니다.

Default: 1000
MaxResourceSize 외부 리소스에 허용되는 최대 크기(KB)입니다.

Default: 100
MaxStringResultLength RDL 식의 반환 값에 허용되는 최대 문자 수입니다.

Default: 1000
MaxArrayResultLength RDL 식의 배열 반환 값에 허용되는 최대 항목 수입니다.

Default: 100
유형 RDL 식 내에 허용할 멤버 목록입니다.
허용 RDL 식에 허용할 형식 또는 형식 집합입니다.
Namespace 해당 특성은 Value에 Allow 적용되는 하나 이상의 형식을 포함하는 네임스페이스입니다. 이 속성은 대/소문자를 구분하지 않습니다.
AllowNew 해당 부울 특성 Allow 은 RDL 식 또는 <RDL 클래스> 요소에서 형식의 새 인스턴스가 허용되는지 여부를 제어합니다.

사용하도록 설정하면 RDLSandboxing AllowNew 설정에 관계없이 RDL 식에서 새 배열을 만들 수 없습니다.
Allow 값은 RDL 식에서 허용할 형식의 이름입니다. * 값은 네임스페이스의 모든 형식이 허용됨을 나타냅니다. 이 속성은 대/소문자를 구분하지 않습니다.
멤버 요소에 있는 <Types> 형식 목록 및 RDL 식에서 허용되지 않는 멤버 이름 목록에 대한 값입니다.
Deny RDL 식에서 허용되지 않는 멤버의 이름입니다. 이 속성은 대/소문자를 구분하지 않습니다.

멤버에 대해 지정된 경우 Deny 모든 형식에 대해 이 이름을 가진 모든 멤버는 허용되지 않습니다.

RDL 샌드박싱을 사용하는 경우 식 작업

식에 사용되는 리소스를 관리하기 위해 다음과 같은 방식으로 RDL 샌드박싱 기능을 수정할 수 있습니다.

  • 식에 사용되는 문자의 수를 제한합니다.

  • 식에서 반환되는 결과의 크기를 제한합니다.

  • 식에 사용할 수 있는 특정 형식 목록을 허용합니다.

  • 식에 사용할 수 있는 허용된 형식 목록에 대해 이름별로 멤버 목록을 제한합니다.

  • RDL 샌드박싱 기능을 사용하면 승인된 유형 목록과 거부된 구성원 목록을 만들 수 있습니다. 승인된 유형 목록은 허용 목록이라고 합니다. 거부된 멤버 목록을 차단 목록이라고 합니다.

참고 항목

보고서 정의에서 컴퓨터는 식 참조의 각 인스턴스에 대한 형식을 알 수 없습니다. 차단 목록에 멤버를 추가하면 허용 목록의 모든 형식에서 해당 이름의 모든 멤버를 거부합니다.

RDL 식 결과는 런타임에 확인됩니다. RDL 식은 보고서가 게시되면 보고서 정의에서 확인됩니다. 보고서 서버 추적 로그를 모니터링하여 위반 항목이 있는지 확인할 수 있습니다. 자세한 내용은 Report Server Service Trace Log을 참조하세요.

형식 사용

허용 목록에 형식을 추가하는 경우 RDL 식에 액세스하기 위해 다음 진입점을 제어합니다.

  • 형식의 정적 멤버

  • Visual Basic '''New'' 메서드입니다.

  • <Classes> 보고서 정의의 요소입니다.

  • 허용 목록의 형식에 대한 차단 목록에 추가한 멤버입니다.

허용 목록은 다음 진입점을 제어하지 않습니다.

  • 보고서 데이터 세트. 쿼리에서 반환된 보고서 데이터 세트 필드에는 유효한 RDL 형식이 포함되었을 수 있습니다.

  • 보고서 매개 변수 사용자가 제공한 매개 변수 값에는 유효한 RDL 형식이 포함되었을 수 있습니다.

  • 차단 목록에 없는 활성화된 형식의 멤버입니다. 기본적으로 허용 목록에 있는 모든 형식의 모든 멤버가 사용하도록 설정됩니다. 차단 목록에 멤버 이름을 추가하면 허용 목록에 있는 모든 형식에서 해당 이름의 모든 멤버가 거부됩니다.

한 형식의 멤버를 사용하도록 설정하지만 다른 형식에 대해 이름이 같은 멤버를 거부하려면 다음 작업을 수행해야 합니다.

  • <Deny> 멤버 이름에 대한 요소를 추가합니다.

  • 사용하도록 설정할 멤버에 대해 사용자 지정 어셈블리의 클래스에 이름이 다른 프록시 멤버를 만듭니다.

  • 허용 목록에 새 클래스를 추가합니다.

허용 목록에 Visual Basic .NET Framework 함수를 추가하려면 네임스페이스의 해당 형식 Microsoft.VisualBasic 을 허용 목록에 추가합니다.

허용 목록에 Visual Basic .NET Framework 형식 키워드(keyword) 추가하려면 해당 CLR 형식을 허용 목록에 추가합니다. 예를 들어 Visual Basic .NET Framework 키워드(keyword) Integer를 사용하려면 요소에 <RDLSandboxing> 다음 XML 조각을 추가합니다.

<Allow Namespace="System">Int32</Allow>  

허용 목록에 제네릭 또는 Visual Basic .NET Framework nullable 형식을 추가하려면 다음 작업을 수행해야 합니다.

  • 일반 또는 Visual Basic .NET Framework nullable 형식에 대한 프록시 형식을 만듭니다.

  • 허용 목록에 프록시 형식을 추가합니다.

사용자 지정 어셈블리의 형식을 허용 목록에 추가해도 어셈블리에 대한 실행 권한이 암시적으로 부여되지는 않습니다. 코드 액세스 보안 파일을 명확하게 수정하고 어셈블리에 대한 실행 권한을 제공해야 합니다. 자세한 내용은 Code Access Security in Reporting Services을 참조하세요.

멤버의 <거부> 목록 유지 관리

허용 목록에 새 형식을 추가하는 경우 다음 목록을 사용하여 멤버의 차단 목록을 업데이트해야 할 수 있는 시기를 결정합니다.

  • 새 형식을 제공하는 버전으로 사용자 지정 어셈블리를 업데이트하는 경우

  • 허용 목록의 형식에 멤버를 추가하는 경우

  • 보고서 서버에서 .NET Framework를 업데이트하는 경우

  • 보고서 서버를 이후 버전의 Reporting Services로 업그레이드하는 경우

  • RDL 형식에 새 멤버가 추가되어 나중 RDL 스키마를 처리하기 위해 보고서 서버를 업데이트하는 경우

연산자 및 새로 만들기 작업

기본적으로 Visual Basic .NET Framework 언어 연산자는 예외 New로 항상 허용됩니다. 요소의 특성이 AllowNew<Allow> 연산자를 New 제어합니다. 기본 컬렉션 접근자 연산자 및 Visual Basic .NET Framework 캐스트 매크로(예: CInt)와 같은 다른 언어 연 ! 산자는 항상 허용됩니다.

사용자 지정 연산자를 포함하여 차단 목록에 연산자를 추가하는 것은 지원되지 않습니다. 형식에 대한 연산자를 제외하려면 다음 작업을 수행해야 합니다.

  • 제외하려는 연산자를 구현하지 않는 프록시 형식을 만듭니다.

  • 허용 목록에 프록시 형식을 추가합니다.

RDL 식에서 새 배열을 만들려면 정의한 클래스의 메서드에 배열을 만들고 해당 클래스를 허용 목록에 추가합니다.

RDL 식에서 새 배열을 만들려면 다음 작업을 수행해야 합니다.

  • 새 클래스를 정의하고 해당 클래스의 메서드에 배열을 만듭니다.

  • 허용 목록에 클래스를 추가합니다.

RsReportServer.config 구성 파일
보고서 서버 서비스 추적 로그

추가 질문이 있으신가요? Reporting Services 포럼에서 질문하기