使用C#使用具有不同凭据的Windows身份validation连接到数据库

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

无论如何使用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#代码模拟域用户。 这个问题有一些例子:

来自C#的Windows模拟

感谢谁说过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。 它工作得很好。