簡體   English   中英

使用C#使用具有不同憑據的Windows身份驗證連接到數據庫

[英]Connecting To A Database Using Windows Authentication With Different Credentials using C#

也許有人可以幫助我。 我正在用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#代碼模擬域用戶。 這個問題有一些例子:

來自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。 它工作得很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM