判斷提示自定義元件中的許可權
根據預設,自訂組譯碼會使用有限的 Execution 權限集合執行。 在某些情況下,您可能想要實作自定義元件,以對安全性系統內的受保護資源進行安全呼叫(例如檔案或登錄)。 若要達成此目的,您必須採取下列動作:
識別您程式碼所需的完整權限,以進行安全的呼叫。 如果這個方法是 Microsoft .NET Framework 程式庫的一部分,這項資訊應該包含在方法文件集中。
修改報表伺服器原則組態檔,以授與自訂組件所需的權限。 如需安全性原則設定檔的詳細資訊,請參閱使用 Reporting Services 安全性原則檔。
判斷提示所需的權限,做為進行安全呼叫的方法之一部分。 這是必要的動作,因為報表伺服器所呼叫的自訂組譯碼是報表運算式主機組件的一部分,報表運算式主機組件預設會以 Execution 權限執行。 Execution 權限集合允許執行程式碼,但不允許使用受保護的資源。
如果自定義元件以 強名稱簽署,請使用AllowPartiallyTrustedCallersAttribute 標記自定義元件。 這是必要的,因為自定義元件是從屬於報表表達式主機組件的報表表達式呼叫,預設不會授與 FullTrust,因此它是「部分信任」呼叫者。 如需詳細資訊,請參閱使用強式名稱自訂組件。
實作安全呼叫
您可以修改原則組態檔,以授與組件特定權限。 例如,如果您正在撰寫用來進行貨幣轉換的自訂組件,可能需要從檔案讀取目前的貨幣匯率。 若要擷取速率資訊,您必須將額外的安全性許可權 FileIOPermission 新增至元件的許可權集。 您可以在原則組態檔中建立下列其他項目:
<PermissionSet class="NamedPermissionSet"
version="1"
Name="CurrencyRatesFilePermissionSet"
Description="A special permission set that grants read access to my currency rates file.">
<IPermission class="FileIOPermission"
version="1"
Read="C:\CurrencyRates.xml"/>
<IPermission class="SecurityPermission"
version="1"
Flags="Execution, Assertion"/>
</PermissionSet>
然後,您可以加入參考該權限集合的程式碼群組:
<CodeGroup class="UnionCodeGroup"
version="1"
PermissionSetName="CurrencyRatesFilePermissionSet"
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\MSSQL\Reporting Services\ReportServer\bin\CurrencyConversion.dll"/>
</CodeGroup>
為了讓您的程式碼取得適當的權限,必須在自訂組件程式碼中判斷提示權限。 例如,如果您想要將唯讀存取權加入 XML 檔案 C:\CurrencyRates.xml 中,必須將下列程式碼加入您的方法:
// C#
FileIOPermission permission = new FileIOPermission(FileIOPermissionAccess.Read, @"C:\CurrencyRates.xml");
try
{
permission.Assert();
// Load the XML currency rates file
XmlDocument doc = new XmlDocument();
doc.Load(@"C:\CurrencyRates.xml");
...
您也可以加入判斷提示,將其做為方法屬性:
[FileIOPermissionAttribute(SecurityAction.Assert, Read=@"C:\CurrencyRates.xml")]
如需詳細資訊,請參閱<.NET Framework 開發人員指南>中的<.NET Framework 安全性>。