共用方式為


Reporting Services 中的授權

授權這項程序可決定是否應該將要求的存取權類型授與某個識別,允許其對於報表伺服器資料庫中特定資源進行存取。 Reporting Services 使用角色型授權架構,依據使用者的應用程式角色指派,授與使用者存取指定資源的權限。 Reporting Services 的安全性延伸模組包含授權元件的實作,此元件會在報表伺服器上驗證之後,用來授與使用者的存取權。 當使用者透過 SOAP API 與透過 URL 存取,嘗試在系統上或是報表伺服器項目執行作業時,就會叫用授權。 此案例可透過安全性延伸模組介面 IAuthorizationExtension2 來達成。 如前所述,您所部署的任何延伸模組都會自 IExtension 繼承基底介面。 IExtensionIAuthorizationExtension2Microsoft.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;  
}  

報表伺服器透過傳遞登入使用者的名稱、使用者 Token、項目的安全性描述項,以及要求的作業,來呼叫 CheckAccess 方法。 在這裡您將檢查使用者名稱的安全性描述項以及適當的權限以完成要求,然後傳回 true 以表示授與存取,或是傳回 false 來表示存取遭到拒絕。

安全性描述元

在報表伺服器資料庫中,設定項目上的授權原則時,用戶端應用程式 (例如報表管理員) 會將使用者資訊連同項目的安全性原則一起提交到安全性延伸模組。 這個安全性原則與使用者資訊統稱為安全性描述項。 安全性描述項在報表伺服器資料庫中包含項目的下列資訊:

  • 具有某些類型的權限以執行項目上之作業的群組或是使用者。

  • 項目類型。

  • 控制項目存取的判別存取控制清單。

使用 Web 服務 SetPoliciesSetSystemPolicies 方法來建立安全性描述項。

授權流程

Reporting Services 授權由目前在伺服器上設定執行的安全性延伸模組控制。 授權依角色限定其權限,而且只能執行 Reporting Services 安全性架構提供的作業。 下圖描述授權使用者的程序,以便在報表伺服器資料庫中的項目上操作:

Screenshot of the Reporting Services security authorization flow.

如本圖所示,授權會遵循這個順序:

  1. 一旦驗證之後,用戶端應用程式會透過 Reporting Services Web 服務方法,來向報表伺服器提出要求。 驗證 Ticket 會以每個 Web 要求的 HTTP 標頭中之 Cookie 形式,傳遞到報表伺服器。

  2. Cookie 會在進行任何存取檢查之前先驗證。

  3. 一旦驗證 Cookie 之後,報表伺服器就會呼叫 GetUserInfo 並提供識別給使用者。

  4. 使用者嘗試透過 Reporting Services Web 服務執行作業。

  5. 報表伺服器會呼叫 CheckAccess 方法。

  6. 會將安全性描述項擷取和傳遞到 CheckAccess 的自訂安全性延伸模組實作。 此時,會將使用者、群組或是電腦與被存取的項目之安全性描述項進行比較,並授權可執行要求的作業。

  7. 如果使用者已獲得授權,則 Web 服務會執行作業,並將回應傳回給呼叫的應用程式。