報表伺服器執行的任何程式代碼都必須是特定程式代碼存取安全策略的一部分。 這些安全策略包含將辨識項對應至一組具名許可權集合的程式代碼群組。 程式代碼群組通常會與具名許可權集合相關聯,該集合會指定該群組中程式代碼的允許許可權。 運行時間會使用受信任主機或載入器所提供的辨識項來判斷程式代碼所屬的程式碼群組,因此,授與程式碼的許可權。 Reporting Services 遵循此安全策略架構,如Microsoft .NET Framework Common Language Runtime (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>
執行 許可權可讓程式代碼執行(執行),但不允許使用受保護的資源。 在報表中找到的所有表達式都會編譯成儲存為已編譯報表一部分的元件(稱為「表達式主機」元件。 執行報表時,報表伺服器會載入運算式主機組件,並呼叫該元件來執行表達式。 表達式主機組件會以特定索引鍵簽署,用來定義所有表達式主機的程式代碼群組。
報表表達式會參考報表物件模型集合(欄位、參數等),並執行簡單的工作,例如算術和字串運算。 執行這些簡單作業的程式代碼只需要 執行 許可權。 根據預設, Code 元素和任何自定義元件中的使用者定義方法會在 Reporting Services 中授與 執行 許可權。 因此,針對大多數表達式,目前的設定不需要您修改任何安全策略檔案。 若要授與表達式主機組件的其他許可權,系統管理員必須修改報表伺服器和報表設計師的原則組態檔,以及變更報表表達式程式代碼群組。 因為它是全域設定,所以變更表達式主機的默認許可權會影響所有報表。 基於這個理由,強烈建議您將需要額外安全性的所有程式代碼放入自定義元件中。 只有這個元件會被授與您需要的許可權。
這很重要
呼叫外部元件或受保護資源的程式代碼應該併入自定義元件,以用於報表中。 這麼做可讓您更充分掌控程序代碼所要求的和判斷提示許可權。 您不應該對 Code 元素內的安全方法進行呼叫。 這樣做需要您將 FullTrust 授與報表運算式主機,並授與所有自定義程式代碼對 CLR 的完整存取權。
謹慎
請勿將 FullTrust 授與報表運算式主機的程式代碼群組。 如果您這麼做,您可以啟用所有報表運算式來呼叫受保護的系統。
報表中參考的自定義元件
某些報表表達式可以呼叫第三方程式代碼元件,也稱為 Reporting Services 中的自定義元件。 報表伺服器預期這些元件至少具有原則組態檔中的 執行 許可權。 根據預設,隨 Reporting Services 隨附的原則檔案會授與從 「我的計算機」區域開始的所有元件 執行 許可權。 您可以視需要將其他許可權授與自訂元件。
在某些情況下,您可能需要執行需要報表運算式中特定程式代碼許可權的作業。 通常,這表示報表運算式需要呼叫安全的CLR連結庫方法(例如存取檔案或系統登錄的集合)。 .NET Framework 檔描述進行此安全呼叫所需的程序代碼許可權;若要執行呼叫,呼叫程式代碼必須授與這些特定的安全許可權。 如果您從報表表達式或 Code 元素進行呼叫,則必須將表示式主機組件授與適當的許可權。 不過,一旦您授與表達式主控許可權,任何報表中任何表達式中執行的所有程式代碼現在都會被授與該特定許可權。 從自定義元件進行呼叫並授與該自定義元件特定許可權會更安全。