WindowsIdentity的含义是什么

时间:2012-10-25 10:15:29

标签: c# sqlclr

在研究SQL CLR存储过程时,我遇到了以下链接Link for SQL Bulk Copy in CLR 。 在此链接中,用户已使用 WindowsIdentity currentIdentity = SqlContext.WindowsIdentity; WindowsImpersonationContext impersonatedIdentity = currentIdentity.Impersonate();

我无法理解WindowsImpersonationContext的用途。没有它的使用我可以运行我的代码。任何人都可以告诉我这个身份模拟的确切用途。

1 个答案:

答案 0 :(得分:0)

E.g。如果你想在与进程相同的上下文中运行一个线程,你可以做类似的事情:

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

如果运行应用程序池作为一个用户并且身份验证模式设置为Windows身份验证的网站(在MS-IIS上),这非常有用。然后你可能希望线程以用户访问网站的方式运行。

<强>更新

我只想澄清一下。这一行:

  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();

在模拟和撤消之间,用户被模拟,所有代码都以此用户身份运行。我知道这个示例中的用户是相同的,但想象一下该线程拥有的用户与运行该进程的用户完全不同(用户输入的内容或类似内容)。希望这会有所帮助: - )