안전하게 네이티브 SQL 및 MDX 사용
업데이트: 2009-04-30
계획 서버는 계산 규칙을 손쉽게 지정할 수 있는 언어를 갖추고 있습니다. 특히 이러한 규칙을 사용하여 모델에 데이터를 입력하고, 모델 내에서 또는 모델 사이에 데이터를 이동하고, 기존 데이터로 새로운 값을 계산할 수 있습니다. 이러한 규칙은 모델러 역할의 구성원이 Planning Business Modeler를 두 가지 방식으로 사용하여 실행할 수 있습니다. 첫 번째 방법은 규칙을 작업의 일부로 실행하는 것입니다. 이렇게 규칙이 포함된 작업을 예약하거나 비즈니스 사용자에게 할당할 수 있습니다. 두 번째 방법은 데이터가 변경될 때마다 시스템에서 규칙을 자동 실행하도록 하는 것입니다. 모델러 구성원은 규칙을 Microsoft SQL Server 2005로 실행할지 아니면 MDX로 실행할지도 지정할 수 있습니다. 각 방법은 기능과 성능이라는 측면에서 각각 장단점이 있습니다.
일부 상황에서는 고급 사용자가 보기에 PEL(PerformancePoint 표현 언어)이 너무 제한적일 수 있습니다. 특히 SQL Server 또는 MDX 전문가가 성능 향상을 위해 저장 프로시저를 수정하려는 경우나, 노출되지 않은 기본 제공 SQL Server 함수를 사용하려는 경우나, PEL의 기능으로 해결되지 않는 작업을 수행하려는 경우 등이 여기에 해당합니다. PEL은 원시 SQL Server 또는 MDX의 강력한 기능과 더불어 편리한 규칙 인프라를 제공하므로 각기 다른 스타일의 실행이 가능합니다.
이를 위해 PEL에서는 NativeSql 및 NativeMdxScript라는 새로운 규칙 구현을 제공합니다. 그러나 이와 같은 새 구현에는 보안 위험이 따를 수 있습니다. 즉, 모델 사이트 하나에만 액세스할 수 있는 사용자가 전체 응용 프로그램을 통해 여러 모델 사이트에서 많은 변경 작업을 수행할 수도 있습니다. 특히 이러한 규칙은 계획 서버에서 쉽게 구문 분석할 수 없는 SQL 또는 MDX로 작성되기 때문에 계획 서버에서 이러한 규칙에 대한 어떠한 분석도 수행할 수 없습니다. 따라서 규칙의 새 구현을 실행하기 위해서는 응용 프로그램 데이터베이스가 들어 있는 SQL Server 컴퓨터에 대한 데이터베이스 소유자 권한이 있는 서비스 ID가 필요합니다. 이 경우 악의적인 의도를 갖고 있는 모델러 역할의 구성원이 응용 프로그램의 어느 위치에서 데이터를 변경하거나, 테이블을 삭제하거나, 감사 내역을 수정하거나, 기타 변경 작업을 수행할 수도 있습니다.
이러한 위험을 줄이는 데는 두 가지 방법이 있습니다. 그 중 하나는 승인 시스템을 사용하는 것이고, 다른 하나는 모든 규칙을 낮은 권한의 사용자로 실행하는 것입니다. 두 번째 방법에 대해서는 다른 문서에서 설명합니다.
샘플
다음 단계에서는 승인 시스템을 사용하여 네이티브 규칙을 만들고 실행하는 방법에 대해 설명합니다.
계획 관리 콘솔에서 전역 관리자 역할의 구성원이 네이티브 SQL/MDX 규칙 사용 확인란을 선택해야 합니다. 이렇게 하면 상응하는 플래그가 "True"로 설정됩니다. 이 플래그는 응용 프로그램 개체에 대한 부울 값으로 저장됩니다. 응용 프로그램 수준에서 EditMetadata 권한이 있는 사용자는 이를 수정할 수 있는 액세스 권한을 갖습니다. 일반 규칙의 경우에는 이 단계가 필요하지 않습니다.
Planning Business Modeler에서 모델러 역할의 구성원이 원시 규칙을 작성한 다음 InActive 상태로 저장해야 합니다. 일반 규칙에 대한 편집 내용을 비롯하여 규칙 편집 내용을 저장할 때마다 계획 서버에서 규칙이 저장되는 모델의 컨텍스트에 따라 EditRules 작업 유형을 검사합니다. 원시 규칙의 경우 응용 프로그램 Allow Native SQL\MDX Rules 플래그가 활성화되어 있는지, 즉 해당 확인란이 선택되어 있는지 여부와 각 네이티브 규칙이 InActive 상태인지 여부도 서버에서 추가로 검사합니다. InActive로 설정된 규칙은 데이터베이스나 OLAP 큐브에 배포할 수 없고 실행할 수 없습니다.
SQL Server 데이터베이스에서 데이터베이스 관리자가 규칙의 "IsActive" 플래그를 true로 설정하여 규칙을 승인해야 합니다. 이 플래그는 RuleSetsOrRules 테이블의 IsActivated 열에 저장됩니다. 이 테이블에 대한 액세스는 표준 SQL 권한에 따라 제어됩니다. 일반 규칙의 경우에는 이 단계가 필요하지 않습니다.
규칙이 포함된 모델을 모델러 역할의 구성원이 배포해야 합니다. 이 단계는 일반 규칙의 경우에도 필요합니다. 모델을 배포하는 과정에서 계획 서버는 항상 배포되는 모델의 범위에서 GenerateApplication 작업 유형을 검사합니다. 또한 서버에서는 원시 규칙의 경우 응용 프로그램 Allow Native SQL\MDX Rules 플래그가 활성화되어 있는지 여부도 검사합니다. 이 플래그가 InActive로 설정되어 있으면 일반 규칙이건 네이티브 규칙이건 배포할 수 없습니다.
이제 모델러 역할의 구성원이 표준 실행 경로 중 하나를 사용하여 네이티브 규칙을 실행할 수 있습니다. Planning Business Modeler에서 직접 규칙을 실행하는 경우 모델의 컨텍스트에서 ExecuteRule 작업 유형을 검사합니다. 모델러 구성원이 작업을 만들고 이를 예약하거나 사용자에게 할당하면 모델이 들어 있는 모델 사이트의 범위에 따라 ManageWorkflow 작업 유형을 검사합니다. 시스템을 통해 실행되도록 규칙을 설정한 경우에는 작업 유형을 추가로 검사하지 않습니다. 시스템을 통한 규칙 실행 여부는 규칙을 만들 때 설정해 둬야 합니다. 모든 규칙에 적용되는 이 표준 검사 이외에도, 임의의 코드 경로를 통해 네이티브 규칙을 실행하는 경우 그때마다 Allow Native SQL\MDX Rules 플래그에 대한 검사가 추가로 이루어집니다. 이 플래그가 "false"이면 규칙이 실행되지 않습니다.
네이티브 규칙을 변경하는 경우 2단계에서 설명한 내용에 따라 InActive 상태로 저장해야 합니다. 그런 다음 3단계와 4단계를 다시 수행하여 규칙을 재승인해야 합니다. 모든 네이티브 규칙은 항상 이와 같은 승인 프로세스를 거쳐야 합니다. 경우에 따라서는 전역 관리자 구성원이 계획 응용 프로그램에 네이티브 규칙이 필요하지 않다고 판단할 수 있습니다. 이 경우 선택에 따라 Allow Native SQL\MDX Rules 플래그를 활성화하지 않을 수 있습니다. 기본적으로 이 플래그는 False로 설정되어 있습니다. 이 플래그를 True로 설정하더라도 모델러 역할의 구성원이 각 규칙을 만들고 나면 데이터베이스 관리자가 이를 승인해야 합니다. 따라서 관리자가 규칙을 활성화하기 전에 검토할 수 있는 기회를 갖게 됩니다. 마지막으로, 전역 관리자 구성원이 시스템에서 더 이상 원시 규칙이 필요하지 않다고 판단한 경우 Allow Native SQL\MDX Rules 비트를 비활성화할 수 있습니다. 이렇게 하면 네이티브 규칙을 작성, 업데이트, 배포 또는 실행할 수 없게 됩니다. 이 경우 네이티브 규칙을 삭제만 할 수 있습니다.