【问题标题】:Connecting To A Database Using Windows Authentication With Different Credentials using C#使用 C# 使用具有不同凭据的 Windows 身份验证连接到数据库
【发布时间】:2012-01-16 09:25:45
【问题描述】:

也许有人可以在这里帮助我。我正在用 C# 编写一个程序来连接到远程服务器上的数据库。有问题的服务器使用 Windows 身份验证。我也不是服务器的管理员。

无论如何,要使用 SQL Server Management Studio 连接到服务器,我都必须使用不同的凭据。所以我使用runas.exe来连接。

基本上是这样的:

runas.exe /netonly /user:DIFFERENT_DOMAIN\SAME_USERNAME "C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe"

使用 runas.exe 是我连接数据库的唯一方法,如果我尝试在没有 runas 的情况下运行 ssms,我将根本无法连接。

所以现在我的问题。在我用 C# 制作的程序中。如何让我的程序使用不同的凭据连接到同一个数据库,而不必使用 runas.exe?

我尝试过使用:

Sqlconnection sc = new Sqlconnection();
sc.ConnectionString = "Data Source= myServer;Initial Catalog= myDB;Integrated Security=true";
sc.Open();

但我只收到“用户 '' 登录失败。用户未与受信任的 SQL Server 连接关联。”

如果我使用上面的代码和具有正确凭据的 Runas.exe。它将正常工作并连接。但是我不想使用它。

有人知道如何使连接正常工作吗?

【问题讨论】:

    标签: c#


    【解决方案1】:

    感谢谁说过 Windows 模拟!在查看并搜索有关 Windows 模拟的信息后,我遇到了

    [DllImport("advapi32.dll", SetLastError=true, CharSet=CharSet.Unicode)]
      public static extern bool CreateProcessWithLogonW(
         String             userName,
         String             domain,
         String             password,
         LogonFlags         logonFlags,
         String             applicationName,
         String             commandLine,
         CreationFlags          creationFlags,
         UInt32             environment,
         String             currentDirectory,
         ref  StartupInfo       startupInfo,
         out ProcessInformation     processInformation);
    

    看到登录标志为 LOGON_NETCREDENTIALS_ONLY。效果很好。

    【讨论】:

      【解决方案2】:

      您可以通过您的 C# 代码模拟域用户。这个问题有一些例子:

      Windows Impersonation from C#

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-23
        • 1970-01-01
        • 1970-01-01
        • 2018-03-25
        • 2016-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多