共用方式為


允許部分信任的呼叫端

共用程式碼程式庫是 Common Language Runtime (CLR) 整合的一個常見狀況,其中包含使用者定義型別、預存程序、使用者定義函數、使用者定義彙總、觸發程序或公用程式類別的組件通常會由另一個組件或應用程式所存取。要由多個應用程式所共用的程式碼程式庫必須使用強式名稱來簽署。

只有執行階段程式碼存取安全性系統所完全信任的應用程式才能存取未明確使用 System.Security.AllowPartiallyTrustedCallers 屬性所標示的共用 Managed 程式碼組件。嘗試存取強式名稱簽署的組件,但沒有這個屬性的部分信任組件 (在 SQL Server 中註冊且具有 SAFE 或 EXTERNAL_ACCESS 權限集合的組件) 會造成 System.Security.SecurityException 的擲回。您看到的錯誤訊息類似以下:

Msg 6522, Level 16, State 1, Procedure usp_RSTest, Line 0
A .NET Framework error occurred during execution of user defined
routine or aggregate 'usp_RSTest':  System.Security.SecurityException: That assembly does not allow partially trusted callers.
System.Security.SecurityException: at
System.Security.CodeAccessSecurityEngine.ThrowSecurityException(
Assembly asm, PermissionSet granted,PermissionSet refused,
RuntimeMethodHandle rmh, SecurityAction action, Object demand,
IPermission permThatFailed) at
Microsoft.Samples.SqlServer.TestResultSet.Test()

我們建議您最好將 SQL Server 中註冊的所有組件 (加入至全域組件快取的組件除外) 都標示 AllowPartiallyTrustedCallers 屬性,好讓 SQL Server 載入的組件可以彼此存取。要加入至全域組件快取的組件應該先徹底檢閱看看是否安全之後,再加入 AllowPartiallyTrustedCallers 屬性,因為此組件之後將提供給非預期環境的部分信任呼叫端所使用。組件不應該變成完全信任 (在 SQL Server 中使用 UNSAFE 權限集合註冊)。

如需詳細資訊,請參閱 .NET Framework 軟體開發套件中的<從部分受信任程式碼使用程式庫>一節。

範例

假設有一個公用程式類別對於許多伺服器端 CLR 整合應用程式很有幫助。例如,它可能是一個代表叫用查詢之結果的類別。為了啟用這個元件的共用,此公用程式類別會放在個別組件中。然後會從包含 CLR 整合物件的各種其他組件來參考該組件。因為此公用程式類別會在許多不同的伺服器應用程式內使用,所以會謹慎地檢閱它,並解決任何安全性問題。然後會將 AllowPartiallyTrustedCallers 屬性套用到包含此公用程式類別的組件,好讓包含在以 SAFE 或 EXTERNAL_ACCESS 權限集合標示之組件內的 CLR 整合物件可以使用此公用程式類別和方法,即使它們位於不同的組件中亦然。如需如何使用 AllowPartiallyTrustedCallers 屬性的範例,請參閱 CodePlex 上提供的<結果集範例>;如需詳細資訊,請參閱<SQL Server Database Engine 範例>。

請參閱

概念