根據預設,自定義元件程式代碼會以有限的 執行 許可權集執行。 在某些情況下,您可能想要實作自定義元件,以對安全性系統內的受保護資源進行安全呼叫(例如檔案或登錄)。 若要達成此目的,您必須執行下列動作:
識別程式代碼為了進行安全呼叫所需的確切許可權。 如果此方法是Microsoft .NET Framework 連結庫的一部分,則此方法應該包含在方法檔中。
修改報表伺服器原則組態檔,以授與自定義元件所需的許可權。 如需安全策略組態檔的詳細資訊,請參閱 使用 Reporting Services 安全策略檔案。
判斷提示必要許可權,做為進行安全呼叫之方法的一部分。 這是必要的,因為報表伺服器所呼叫的自定義元件程式代碼是報表運算式主機組件的一部分,預設會以 執行 許可權執行。 執行許可權集合可讓程式代碼執行,但不會使用受保護的資源。
如果自定義元件是以強名稱簽署,請使用 AllowPartiallyTrustedCallersAttribute 標記自定義元件。 這是必要的,因為自定義元件是從屬於報表表達式主機組件的報表表達式呼叫,預設不會被授與 FullTrust;因此,它是「部分信任」呼叫端。 如需詳細資訊,請參閱 使用 Strong-Named 自定義元件。
實作安全呼叫
您可以修改原則組態檔,以授與元件特定許可權。 例如,如果您正在撰寫自定義元件來處理貨幣轉換,您可能需要從檔案讀取目前的貨幣匯率。 若要擷取速率資訊,您必須將額外的安全性許可權 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 安全性>。