瞭解安全策略
報表伺服器執行的任何程式代碼都必須是特定程式代碼存取安全策略的一部分。 這些安全性原則包含將辨識項對應至一組具名使用權限集合的程式碼群組。 通常,程式碼群組會與為該群組中程式碼指定允許權限的具名使用權限集合產生關聯。 執行階段會使用受信任主應用程式或載入程式所提供的辨識項來決定程式碼所屬的程式碼群組,以及因此授與程式碼的權限。 Reporting Services 會遵守 Microsoft .NET Framework 通用語言執行平台 (CLR) 所定義的安全性原則架構。 下列各節將描述 Reporting Services 中的各種程式碼類型以及與它們相關聯的原則規則。
報表伺服器元件
報表伺服器元件包含屬於 Reporting Services 產品一部分的程式代碼。 Reporting Services 是使用 Managed 程式碼組件撰寫而成。所有這些組件都是強式名稱 (亦即,經過數位簽署)。 這些組件的程式碼群組都是使用 StrongNameMembershipCondition 所定義,可根據組件強式名稱的公開金鑰資訊提供辨識項。 此程式碼群組會被授與 FullTrust 權限集合。
報表伺服器延伸模組 (轉譯、數據、傳遞和安全性)
報表伺服器延伸模組是指您或其他協力廠商為了擴充 Reporting Services 功能而建立的自訂資料、傳遞、轉譯和安全性延伸模組。 您必須將 FullTrust 授與您要擴充之 Reporting Services 元件相關聯之原則組態檔中的這些延伸模組或元件程式代碼。 隨附於 Reporting Services 的延伸模組會以報表伺服器公開金鑰簽署並接收 FullTrust 權限集合。
重要
您必須修改 Reporting Services 原則設定檔,以便允許任何協力廠商延伸模組的 FullTrust。 如果您沒有針對自訂延伸模組加入具有 FullTrust 的程式碼群組,報表伺服器就無法使用它們。
如需 Reporting Services 中原則組態檔的詳細資訊,請參閱 使用 Reporting Services 安全策略檔案。
在報表中使用的運算式
報表運算式是指包含在報表定義語言檔案之 Code 項目中的內嵌程式碼運算式或使用者定義方法。 原則檔案中已經設定的程式代碼群組,預設會將執行許可權集授與這些表達式。 程式代碼群組看起來像下列範例:
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="Execution"
Name="Report_Expressions_Default_Permissions"
Description="This code group grants default permissions for code in report expressions and Code element. ">
<IMembershipCondition
class="StrongNameMembershipCondition"
version="1"
PublicKeyBlob="002400..."
/>
</CodeGroup>
Execution 權限允許程式碼執行,但不允許使用受保護的資源。 在報表內發現的所有運算式都會編譯成一個組件 (稱為「運算式主機」組件),而該組件會儲存成已編譯報表的一部分。 執行此報表時,報表伺服器會載入運算式主機組件並呼叫該組件以執行運算式。 運算式主機組件會以用來定義所有運算式主機之程式碼群組的特定金鑰進行簽署。
報表運算式會參考報表物件模型集合 (欄位、參數等等),然後執行簡單的工作 (例如算術和字串作業)。 執行這些簡單作業的程式碼只需要 Execution 權限。 根據預設,Code 項目中的使用者定義方法和任何自訂組件都會被授與 Reporting Services 中的 Execution 權限。 因此,針對大多數表達式,目前的設定不需要您修改任何安全策略檔案。 若要授與表達式主機組件的額外許可權,系統管理員必須修改報表伺服器和 報表設計師的原則組態檔,並變更報表表達式程式代碼群組。 因為它是全域設定,所以變更表達式主機的默認許可權會影響所有報表。 基於這個理由,您應該將所有需要額外安全性的程式代碼放入自定義元件中。 只有這個元件會授與您需要的許可權。
重要
呼叫外部組件或受保護資源的程式碼應該併入自訂組件中,以便用於報表內。 這樣做可讓您更有效地控制程式碼所要求和判斷提示的權限。 您不應該呼叫 Code 項目內部的安全方法。 這樣做會需要您將 FullTrust 授與報表運算式主機並將所有自訂程式碼完整存取權授與 CLR。
警告
請勿將 FullTrust 授與報表運算式主機的程式碼群組。 如果您這樣做,就會讓所有報表運算式進行受保護的系統呼叫。
報表中參考的自定義元件
某些報表表達式可以呼叫其他程式代碼元件,也稱為 Reporting Services 中的自定義元件。 報表伺服器會預期這些組件在原則設定檔中至少具有 Execution 權限。 根據預設,Reporting Services 隨附的原則檔案會將 Execution 權限授與所有組件,從「我的電腦」區域開始。 您可以視需要將額外的許可權授與自訂元件。
在某些情況下,您可能需要執行需要報表運算式中特定程式代碼許可權的作業。 一般而言,此案例表示報表表達式需要呼叫安全的CLR連結庫方法(例如存取檔案或系統登錄的CLR連結庫方法)。 .NET Framework 文件說明進行此安全呼叫所需的程式代碼許可權。 若要執行呼叫,呼叫程式代碼必須授與這些特定的安全許可權。 如果您從報表運算式或 Code 項目進行此呼叫,運算式主機組件就必須被授與適當的權限。 不過,一旦您將這些權限授與運算式主機,在任何報表之任何運算式中執行的所有程式碼現在都會被授與該特定權限。 從自定義元件進行呼叫並授與該自定義元件特定許可權會更安全。