共用方式為


線上的模擬和認證

適用於:SQL Server

在 SQL Server Common Language Runtime (CLR) 整合中,使用 Windows 驗證很複雜,但比使用 SQL Server 驗證更安全。 使用 Windows 驗證時,請記住下列考慮。

根據預設,連線到 Windows 的 SQL Server 進程會取得 SQL Server Windows 服務帳戶的安全性內容。 但是,可以將 CLR 函式對應至 Proxy 身分識別,使其輸出連線具有不同於 Windows 服務帳戶的安全性內容。

在某些情況下,您可能想要使用 SqlContext.WindowsIdentity 屬性來模擬呼叫端,而不是以服務帳戶的形式執行。 WindowsIdentity 實例代表叫用呼叫程式代碼之用戶端的身分識別,而且只有在用戶端使用 Windows 驗證時才可使用。 取得 WindowsIdentity 實例之後,您可以呼叫 Impersonate 來變更線程的安全性令牌,然後代表用戶端開啟 ADO.NET 連線。

呼叫 SQLContext.WindowsIdentity.Impersonate 之後,您無法存取本機數據,而且無法存取系統數據。 若要再次存取數據,您必須呼叫 WindowsImpersonationContext.Undo。

下列範例示範如何使用 SqlContext.WindowsIdentity 屬性模擬呼叫端

Visual C#

WindowsIdentity clientId = null;  
WindowsImpersonationContext impersonatedUser = null;  
  
clientId = SqlContext.WindowsIdentity;  
  
// This outer try block is used to protect from   
// exception filter attacks which would prevent  
// the inner finally block from executing and   
// resetting the impersonation.  
try  
{  
   try  
   {  
      impersonatedUser = clientId.Impersonate();  
      if (impersonatedUser != null)  
         return GetFileDetails(directoryPath);  
         else return null;  
   }  
   finally  
   {  
      if (impersonatedUser != null)  
         impersonatedUser.Undo();  
   }  
}  
catch  
{  
   throw;  
}  

注意

如需模擬中行為變更的相關信息,請參閱 SQL Server 2016 中 資料庫引擎 功能的重大變更。

此外,如果您取得Microsoft Windows 身分識別實例,則預設您無法將該實例傳播到另一部計算機;Windows 安全性基礎結構預設會限制該基礎結構。 不過,有一種稱為「委派」的機制,可跨多個受信任計算機傳播 Windows 身分識別。 您可以在 TechNet 文章>中深入瞭解委派。

另請參閱

SqlContext 物件