共用方式為


模擬和 CLR 整合安全性

當 Managed 程式碼存取外部資源時,SQL Server不會自動模擬執行常式所在的目前執行內容。 EXTERNAL_ACCESSUNSAFE 組件中的程式碼可以明確模擬目前的執行內容。

注意

如需模擬中行為變更的資訊,請參閱2014 SQL Server 中 Database Engine 功能的重大變更

同處理序資料存取提供者會提供應用程式開發介面 SqlContext.WindowsIdentity,可用來擷取與目前安全性內容相關聯的 Token。 EXTERNAL_ACCESSUNSAFE 組件中的 Managed 程式碼可以使用這個方法來擷取此內容並使用 .NET Framework WindowsIdentity.Impersonate 方法來模擬該內容。 使用者程式碼明確模擬時適用下列限制:

  • 當 Managed 程式碼處於模擬狀態時,不允許同處理序資料存取。 程式碼可以恢復模擬,然後呼叫同處理序資料存取。 請注意,這樣做需要儲存原始 WindowsImpersonationContext 方法的傳回值 (Impersonate 物件),以及針對這個 Undo 呼叫 WindowsImpersonationContext 方法。

    這項限制表示進行同處理序資料存取時,一定會在適用於工作階段之目前安全性內容的內容中進行, 無法由 Managed 程式碼內部的明確模擬所修改。

  • 若為以非同步方式執行的 Managed 程式碼 (例如,透過 UNSAFE 組件,建立執行緒並以非同步方式執行程式碼),永遠不允許同處理序資料存取。 不論是否存在模擬,這項限制都成立。

當程式碼在不同於 SQL Server 的模擬內容中執行時,它無法執行同處理序資料存取呼叫,而應該在進行同處理序資料存取呼叫之前,先復原模擬內容。 從 Managed 程式碼存取同處理序資料時,Transact-SQL 進入 Managed 程式碼之進入點的原始執行內容始終用於授權。

元件和 UNSAFE 元件都會 EXTERNAL_ACCESS 使用SQL Server服務帳戶存取作業系統資源,除非它們主動模擬先前所述的目前安全性內容。 因此,EXTERNAL_ACCESS 組件的作者比 SAFE 組件的作者需要更高的信任層級,而此信任層級是由 EXTERNAL ACCESS 登入層級權限所指定。 只有信任在 SQL Server 服務帳戶下執行程式碼的登入,才應授與 EXTERNAL ACCESS 許可權。

另請參閱

CLR 整合安全性
連接的模擬和認證