共用方式為


CLR 整合程式設計模型限制

當您建置 Managed 預存程式或其他 Managed 資料庫物件時,SQL Server 會執行某些程式碼檢查,以在第一次在資料庫中註冊、使用 CREATE ASSEMBLY 語句,以及在運行時間執行 Managed 程式代碼元件檢查。 在運行時間也會檢查 Managed 程式代碼,因為在元件中,可能有程式代碼路徑在運行時間可能永遠不會實際到達。 這提供註冊第三方元件的彈性,特別是,如此一來,在用戶端環境中執行「不安全」程序代碼時,不會封鎖元件,但永遠不會在裝載的 CLR 中執行。 Managed 程式代碼必須符合的需求取決於元件是否註冊為 SAFEEXTERNAL_ACCESSUNSAFESAFE ,為最嚴格,且如下所列。

除了對 Managed 程式代碼元件的限制之外,也會授與程式代碼安全性許可權。 Common Language Runtime (CLR) 支援稱為程式代碼存取安全性 (CAS) 的安全性模型,適用於 Managed 程式代碼。 在此模型中,會根據程式碼的身分識別,將許可權授與元件。 SAFEEXTERNAL_ACCESSUNSAFE 元件具有不同的 CAS 許可權。 如需詳細資訊,請參閱 CLR 整合程式代碼存取安全性

CREATE ASSEMBLY Checks

CREATE ASSEMBLY執行語句時,會針對每個安全性層級執行下列檢查。 如果有任何檢查失敗, CREATE ASSEMBLY 將會失敗並出現錯誤訊息。

全域 (任何安全性層級)

所有參考的元件都必須符合下列一或多個準則:

  • 元件已在資料庫中註冊。

  • 元件是其中一個支援的元件。 如需詳細資訊,請參閱 支援的 .NET Framework 連結庫

  • 您使用的是CREATE ASSEMBLY FROM<位置>,而且所有參考的元件及其相依性都可在位置>取得<

  • 您使用的是 CREATE ASSEMBLY FROM<位元組 ...>, 而且所有參考都是透過空格分隔的位元組來指定。

EXTERNAL_ACCESS

所有 EXTERNAL_ACCESS 元件都必須符合下列準則:

  • 靜態欄位不會用來儲存資訊。 允許唯讀靜態欄位。

  • PEVerify 測試已通過。 PEVerify 工具 (peverify.exe),它會檢查 MSIL 程式代碼和相關聯的元數據是否符合類型安全性需求,隨附於 .NET Framework SDK。

  • 例如,不會使用與 類別的 SynchronizationAttribute 同步處理。

  • 未使用完成項方法。

元件中 EXTERNAL_ACCESS 不允許下列自訂屬性:

  • System.ContextStaticAttribute

  • System.MTAThreadAttribute

  • System.Runtime.CompilerServices.MethodImplAttribute

  • System.Runtime.CompilerServices.CompilationRelaxationsAttribute

  • System.Runtime.Remoting.Contexts.ContextAttribute

  • System.Runtime.Remoting.Contexts.SynchronizationAttribute

  • System.Runtime.InteropServices.DllImportAttribute

  • System.Security.Permissions.CodeAccessSecurityAttribute

  • System.Security.SuppressUnmanagedCodeSecurityAttribute

  • System.Security.UnveriableCodeAttribute

  • System.STAThreadAttribute

  • System.ThreadStaticAttribute

安全

  • 會檢查所有 EXTERNAL_ACCESS 元件條件。

運行時間檢查

在運行時間,會檢查程式代碼元件是否有下列條件。 如果找到上述任何條件,則不允許執行 Managed 程式代碼,而且會擲回例外狀況。

不安全的

不允許從位元組數位列呼叫 System.Reflection.Assembly.Load() 方法,或透過命名空間隱含方式載入 Reflection.Emit 元件。

EXTERNAL_ACCESS

會檢查所有 UNSAFE 條件。

不允許在支援的元件清單中,以下列主機保護屬性 (HPA) 值標註的所有類型和方法。

  • SelfAffectingProcessMgmt

  • SelfAffectingThreading

  • 同步

  • SharedState

  • ExternalProcessMgmt

  • ExternalThreading

  • SecurityInfrastructure

  • MayLeakOnAbort

  • 用戶介面

如需 HPA 的詳細資訊,以及支援元件中不允許的類型和成員清單,請參閱 主機保護屬性和 CLR 整合程式設計

安全

會檢查所有 EXTERNAL_ACCESS 條件。

另請參閱

支援的 .NET Framework 連結庫
CLR 整合代碼存取安全性
主機保護屬性和 CLR 整合程序設計
建立元件