CLR 整合程式設計模型限制
適用於:SQL ServerAzure SQL 受控執行個體
當您建置 Managed 預存程式或其他 Managed 資料庫物件時,SQL Server 會執行需要考慮的特定程式代碼檢查。 當第一次在資料庫中註冊、使用 CREATE ASSEMBLY
語句,以及在運行時間時,這些檢查會在Managed程式碼元件上執行。 在運行時間也會檢查 Managed 程式代碼,因為在元件中,可能會有程式代碼路徑在運行時間可能永遠不會實際到達。
這些程式代碼檢查提供註冊第三方元件的彈性,因此元件不會在 客戶端環境中執行不安全 的程式代碼遭到封鎖,但永遠不會在裝載的 Common Language Runtime (CLR) 中執行。 Managed 程式代碼必須符合的需求取決於元件是否註冊為 SAFE
、 EXTERNAL_ACCESS
或 UNSAFE
。
SAFE
是最嚴格的安全性層級。
除了對 Managed 程式代碼元件的限制之外,也會授與程式代碼安全性許可權。 CLR 支援稱為 Managed 程式碼之程式碼存取安全性 (CAS) 的安全性模型。 在此模型中,會根據程式碼的身分識別,將許可權授與元件。
SAFE
、 EXTERNAL_ACCESS
和 UNSAFE
元件具有不同的 CAS 許可權。 如需詳細資訊,請參閱 CLR 整合程式代碼存取安全性。
CREATE ASSEMBLY 檢查
CREATE ASSEMBLY
當語句執行時,會針對每個安全性層級執行下列檢查。 如果有任何檢查失敗, CREATE ASSEMBLY
則失敗並出現錯誤訊息。
全域 (任何安全性層級)
所有參考的元件都必須符合下列一或多個準則:
元件已在資料庫中註冊。
元件是其中一個支援的元件。 如需詳細資訊,請參閱
支援的 .NET Framework 連結庫。 CREATE ASSEMBLY FROM <location>
您使用 的是 ,而且所有參考的元件及其相依性都可在 中使用<location>
。您使用的是
CREATE ASSEMBLY FROM <bytes ...>
,而且所有參考都是透過空格分隔的位元組來指定。
EXTERNAL_ACCESS
所有 EXTERNAL_ACCESS
元件都必須符合下列準則:
靜態欄位不會用來儲存資訊。 允許唯讀靜態欄位。
PEVerify 測試已通過。 PEVerify 工具 (
peverify.exe
)會檢查通用中繼語言 (CIL) 程式代碼和相關聯的元數據是否符合類型安全性需求,會隨附於 .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.UnverifiableCodeAttribute
System.STAThreadAttribute
System.ThreadStaticAttribute
SAFE
- 會檢查所有
EXTERNAL_ACCESS
元件條件。
執行階段檢查
在運行時間,會檢查程式代碼元件是否有下列條件。 如果找到上述任何條件,則不允許執行 Managed 程式代碼,並擲回例外狀況。
UNSAFE
您無法透過從位元組數位列呼叫 System.Reflection.Assembly.Load()
方法,或隱含地使用 Reflection.Emit
命名空間,來載入元件。
EXTERNAL_ACCESS
會檢查所有 UNSAFE
條件。
不允許在支援的元件清單中,以下列主機保護屬性 (HPA) 值標註的所有類型和方法。
SelfAffectingProcessMgmt
SelfAffectingThreading
Synchronization
SharedState
ExternalProcessMgmt
ExternalThreading
SecurityInfrastructure
MayLeakOnAbort
UI
如需 HPA 和支援元件中不允許類型和成員清單的詳細資訊,請參閱 主機保護屬性和 CLR 整合程式設計。
SAFE
會檢查所有 EXTERNAL_ACCESS
條件。