Reporting Services의 권한 부여

권한 부여는 보고서 서버 데이터베이스의 지정된 리소스에 대해 요청된 유형의 액세스 권한을 ID에 부여해야 하는지 여부를 결정하는 과정입니다. Reporting Services는 애플리케이션에 대한 사용자의 역할 할당을 기준으로 지정된 리소스에 대한 액세스 권한을 사용자에게 부여하는 역할 기반 권한 부여 아키텍처입니다. Reporting Services의 보안 확장에는 보고서 서버에서 인증된 사용자에게 액세스 권한을 부여하는 데 사용되는 권한 부여 구성 요소의 구현이 포함되어 있습니다. 권한 부여는 사용자가 SOAP API 및 URL 액세스를 통해 시스템 또는 보고서 서버 항목에 대한 작업을 수행하려고 할 때 호출됩니다. 이 시나리오는 보안 확장 인터페이스 IAuthorizationExtension2를 통해 가능합니다. 앞에서 설명한 대로 모든 확장은 배포하는 모든 확장에 대한 기본 인터페이스를 IExtension에서 상속합니다. IExtensionIAuthorizationExtension2는 Microsoft.ReportingServices.Interfaces 네임스페이스의 멤버입니다.

액세스 확인

권한 부여에서 사용자 지정 보안 구현의 핵심은 액세스 권한 확인으로, 이 동작은 CheckAccess 메서드에 구현됩니다. CheckAccess 는 사용자가 보고서 서버에서 작업을 시도할 때마다 호출됩니다. 메서드는 CheckAccess 각 작업 유형에 대해 오버로드됩니다. 폴더 작업의 경우 액세스 검사 예제는 다음 예제와 같습니다.

// Overload for Folder operations  
public bool CheckAccess(  
   string userName,   
   IntPtr userToken,   
   byte[] secDesc,   
   FolderOperation requiredOperation)  
{  
   // If the user is the administrator, allow unrestricted access.  
   if (userName == m_adminUserName)   
      return true;  
  
   AceCollection acl = DeserializeAcl(secDesc);  
   foreach(AceStruct ace in acl)  
   {  
         if (userName == ace.PrincipalName)  
         {  
            foreach(FolderOperation aclOperation in   
               ace.FolderOperations)  
            {  
               if (aclOperation == requiredOperation)  
                     return true;  
            }  
         }  
   }  
   return false;  
}  

보고서 서버는 로그온한 사용자의 이름, 사용자 토큰, 항목의 보안 설명자 및 요청된 작업을 전달하여 메서드를 호출 CheckAccess 합니다. 여기서는 사용자 이름에 대한 보안 설명자와 요청을 완료하기 위한 적절한 권한을 검사 다음, 액세스 권한이 부여되었음을 나타내기 위해 true를 반환하거나 액세스가 거부되었음을 나타내는 false를 반환합니다.

보안 설명자

보고서 서버 데이터베이스의 항목에 대한 권한 부여 정책을 설정할 때 클라이언트 애플리케이션(예: 보고서 관리자)은 항목에 대한 보안 정책과 함께 보안 확장에 사용자 정보를 제출합니다. 이 보안 정책 및 사용자 정보는 총체적으로 보안 설명자로 알려져 있습니다. 보안 설명자에는 보고서 서버 데이터베이스의 항목에 대한 다음 정보가 포함됩니다.

  • 항목에 대한 작업을 수행할 수 있는 특정 유형의 권한을 가진 그룹 또는 사용자

  • 항목의 형식입니다.

  • 항목에 대한 액세스를 제어하는 임의 액세스 제어 목록입니다.

보안 설명자는 웹 서비스의 SetPoliciesSetSystemPolicies 메서드를 사용하여 만들어집니다.

권한 부여 흐름

Reporting Services 권한 부여는 현재 서버에서 실행되도록 구성된 보안 확장 프로그램에서 제어됩니다. 권한 부여는 역할 기반으로 이루어지며 Reporting Services 보안 아키텍처에서 제공되는 권한과 작업으로 제한됩니다. 다음 다이어그램은 사용자가 보고서 서버 데이터베이스의 항목에서 작동하도록 권한을 부여하는 프로세스를 보여 줍니다.

Screenshot of the Reporting Services security authorization flow.

이 다이어그램에 표시된 것처럼 권한 부여는 다음 시퀀스를 따릅니다.

  1. 인증되면 클라이언트 애플리케이션은 Reporting Services 웹 서비스 메서드를 통해 보고서 서버에 요청합니다. 인증 티켓은 각 웹 요청의 HTTP 헤더에 있는 쿠키 형식으로 보고서 서버에 전달됩니다.

  2. 쿠키는 액세스 검사 전에 유효성을 검사합니다.

  3. 쿠키가 검사되면 보고서 서버에서 GetUserInfo를 호출하고 사용자에게 ID가 부여됩니다.

  4. 사용자가 Reporting Services 웹 서비스를 통해 작업을 시도합니다.

  5. 보고서 서버에서 메서드를 호출합니다 CheckAccess .

  6. 보안 설명자가 검색되어 사용자 지정 보안 확장 구현 CheckAccess에 전달됩니다. 이 시점에서 사용자, 그룹 또는 컴퓨터는 액세스할 항목의 보안 설명자와의 대조를 통한 확인을 거치고 요청된 작업을 수행할 수 있도록 권한이 부여됩니다.

  7. 사용자에게 권한이 부여되면 웹 서비스에서 작업을 수행하고 응답을 호출 애플리케이션에 반환합니다.