Reporting Services 中的程式碼存取安全性

程式碼存取安全性是以下列核心概念為主:辨識項、程式碼群組與具名使用權限集合。 在 Reporting Services 中,報表管理員、報表設計師 和報表伺服器元件各有一個原則檔案,可設定自定義元件的程式代碼存取安全性。 此原則檔案也會設定數據、傳遞、轉譯和安全性延伸模組的程式代碼存取。 下列各節將提供程式碼存取安全性的概觀。 如需本節所涵蓋文章的詳細資訊,請參閱 Microsoft .NET Framework SDK 檔中的。

Reporting Services 使用程式碼存取安全性,因為雖然報表伺服器是以 ASP.NET 技術為基礎而建置,但一般 ASP.NET 應用程式和報表伺服器之間有很大的差異。 典型的 ASP.NET 應用程式不會執行用戶程序代碼。 反之,Reporting Services 會使用開放且可延伸的架構,允許使用者使用報表定義語言的 Code 元素針對報表定義檔案進行程式設計,以及在自訂組件中開發專用功能,以便用於報表中。 此外,開發人員可以設計和開發功能強大的延伸模組,以便強化報表伺服器的功能。 這種能力與彈性需要盡可能多地提供保護和安全性。

Reporting Services 開發人員可以在報表中使用任何 .NET Framework 組件,並以原生方式呼叫所有部署至全域組件快取之組件的功能。 報表伺服器唯一可控制的事項就是要針對報表運算式和載入的自訂組件提供哪些權限。 在 Reporting Services 中,自訂組件預設會收到僅限 Execute 的權限。

辨識項

辨識項是指 Common Language Runtime (CLR) 用來決定程式碼組件之安全性原則的資訊。 辨識項會向執行階段指出程式碼具有特定特性。 常見的辨識項形式包括數位簽章和組件的位置。 不過,您也可以自行設計辨識項,以便表示對應用程式有意義的其他資訊。

組件和應用程式網域都是根據辨識項收到權限。 例如,Reporting Services 嘗試存取之組件的位置是其中一種常見的弱式名稱組件辨識項形式。 此範例稱為 URL 辨識項。 部署至報表伺服器之自訂資料處理延伸模組的URL辨識項可能是 C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.FsiDataExtension.dll。 組件的強式名稱或數位簽章是另一種常見的辨識項形式。 在此情況下,辨識項就是組件的公開金鑰資訊。

程式代碼群組

程式碼群組是具有指定成員資格條件的程式碼邏輯群組。 任何符合成員資格條件的程式碼都包含在此群組中。 系統管理員會透過管理程式碼群組及其相關聯的權限集合,設定安全性原則。

程式碼群組的成員資格條件是以辨識項為基礎。 例如,程式碼群組的 URL 成員資格是以 URL 辨識項為基礎。 Common Language Runtime (CLR) 會使用識別特性 (例如 URL 辨識項) 來描述程式碼以及判斷是否符合群組的成員資格條件。 例如,如果程式碼群組的成員資格條件是「組件中的程式碼 C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.FsiDataExtension.dll」,執行階段就會檢查辨識項,以便判斷程式碼是否源自該位置。 此類型程式代碼群組的組態專案範例可能看起來像下列範例:

<CodeGroup class="UnionCodeGroup"  
   version="1"  
   PermissionSetName="FullTrust"  
   Name="MyCodeGroup"  
   Description="Code group for my data processing extension">  
      <IMembershipCondition class="UrlMembershipCondition"  
         version="1"  
         Url="C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.FsiDataExtension.dll"  
       />  
</CodeGroup>  

您應該與系統管理員或應用程式部署專家一起判斷自訂組件或 Reporting Services 延伸模組所需的程式碼存取安全性和程式碼群組類型。

具名許可權集合

具名使用權限集合是指系統管理員可用來與程式碼群組建立關聯的權限集合。 大部分具名使用權限集合都至少包含一個權限、名稱和權限集合的描述。 系統管理員可以使用具名使用權限集合來建立或修改程式碼群組的安全性原則。 相同的具名使用權限集合可以與多個程式碼群組產生關聯。 CLR 提供內建的具名許可權集合,例如 Nothing、ExecutionInternetLocalIntranetEverythingFullTrust

注意

Reporting Services 中的自訂資料、傳遞、轉譯和安全性延伸模組必須在 FullTrust 權限集合下執行。 請與系統管理員合作,針對 Reporting Services 延伸模組加入適當的程式碼群組和成員資格條件。

您可以將自己使用之自訂組件的自訂權限等級與報表產生關聯。 例如,如果您想要允許組件存取特定檔案,就可以建立具有特定檔案 I/O 存取權的具名使用權限集合,然後將該權限集合指派給程式碼群組。 下列權限集合會授與 MyFile.xml 檔的唯讀存取權:

<PermissionSet class="NamedPermissionSet"  
   version="1"  
   Name="MyNewFilePermissionSet"  
   Description="A special permission set that grants read access to my file.">  
    <IPermission class="FileIOPermission"  
       version="1"  
       Read="C:\MyFile.xml"/>  
    <IPermission class="SecurityPermission"  
       version="1"  
       Flags="Assertion, Execution"/>  
</PermissionSet>  

您授與此權限集合的程式代碼群組看起來可能類似下列範例:

<CodeGroup class="UnionCodeGroup"  
   version="1"  
   PermissionSetName="MyNewFilePermissionSet"  
   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\Reporting Services\ReportServer\bin\MyCustomAssembly.dll"/>  
</CodeGroup>