2012-10-25 216 views
0

在研究SQL CLR存儲過程時,我遇到以下鏈接Link for SQL Bulk Copy in CLR。 在這個環節用戶都在使用 WindowsIdentity currentIdentity = SqlContext.WindowsIdentity; WindowsImpersonationContext impersonatedIdentity = currentIdentity.Impersonate(); 什麼是WindowsIdentity的含義

我無法理解有什麼用WindowsImpersonationContext。沒有的它的使用,我能跑我code.Can有人告訴我這是什麼身份假冒的確切使用。

回答

0

E.g.如果你想運行在相同的上下文中進程中的線程,你可以做一些類似這樣:

private void ImpersonateThread() 
    { 
     new Thread(() => 
     { 
      Thread.CurrentPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent()); 
      //Do the work... 
     }).Start(); 
    } 

這是如果運行的網站(在MS-IIS),其中應用程序池是非常有用的作爲一個用戶運行,認證模式設置爲Windows認證。那麼你可能會希望線程作爲訪問該網站的用戶來運行。

UPDATE:

我只是想澄清這一點。行:

Thread.CurrentPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent()); 

剛剛轉會的用戶(用戶仍然不能冒充該線程還)給線程,因此其它部件可能會看到用戶是誰,以及在必要時使用這些信息,例如像這樣:

 System.Security.Principal.WindowsImpersonationContext impersonationContext; 
     impersonationContext = 
      ((System.Security.Principal.WindowsIdentity)System.Threading.Thread.CurrentPrincipal.Identity).Impersonate(); 
      //Do the work that you want within the impersonated users context. 
     impersonationContext.Undo(); 

在模擬和撤消之間,用戶被模擬並且所有代碼都以該用戶的身份運行。我知道用戶在這個示例中是一樣的,但想象一下,該線程使用戶完全不同於運行該進程的用戶(用戶輸入的內容或類似內容)。希望這有助於:-)