2010-05-08 41 views
5

我有一個Windows域,其中一臺機器運行SQL Server 2005,並且配置爲僅支持Windows身份驗證。我想在同一網絡上的一臺機器上運行C#客戶機應用程序,但不在該域上,並訪問SQL Server 2005實例上的數據庫。從使用Windows身份驗證的非域計算機訪問SQL Server 2005

我認爲這會是做這樣的事情的一個簡單的問題:

string connectionString = "Data Source=server;Initial Catalog=database;User Id=domain\user;Password=password"; 
SqlConnection connection = new SqlConnection(connectionString); 
connection.Open(); 

然而,這種失敗:客戶端錯誤是:

System.Data.SqlClient的。 SQLEXCEPTION:登錄失敗,用戶'域\用戶 和服務器端錯誤是:錯誤18456,嚴重性14,狀態5

我已經試過v包括將集成安全性設置爲true和false以及用戶標識中的\而不是\,但沒有成功。

一般而言,我知道可以從非域計算機連接到SQL Server 2005實例(例如,我正在使用一個基於Linux的應用程序,很高興地這樣做),但是我沒有似乎能夠解決如何從Windows機器上做到這一點。

+0

你試圖用SQL服務器連接什麼類型的應用程序? Web應用程序? – 2010-05-08 23:45:21

+0

這只是一個通過Visual Studio或命令行運行的C#應用​​程序。 – user304582 2010-05-09 01:59:02

回答

0

您是否嘗試使用machineName \ UserName進行連接?我也想象應該在SQL數據庫中創建這樣的用戶是否正確?

+0

嗨 - 有趣的想法,但沒有我沒有 - 在SQL Server實例中沒有machineName \ UserName用戶。 – user304582 2010-05-08 21:58:05

5

使用Management Studio通過Windows身份驗證連接到另一個域上的服務器時,需要在啓動應用程序時使用「runas」工具。

runas /user:OTHERDOMAIN\OTHERUSERNAME /netonly 
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe" 

也許你可以在啓動你的應用程序時嘗試類似的事情?

+0

嗨 - 有趣,但我在這裏不是可能性。 – user304582 2010-05-09 01:58:11

+0

這真棒,對我來說就像一個魅力!謝謝!! – wsanville 2010-07-26 12:34:26

1

可以在具有相同用戶名和密碼的每臺計算機上創建本地用戶一旦創建了這些用戶,就可以讓用戶在SQL服務器上訪問SQL服務器,而在其他機器上,您的應用程序必須正在運行作爲新創建的用戶,如果是Web應用程序,只需更改應用程序池設置即可。

+0

嗨 - 可悲的是,我沒有能力在客戶端或SQL Server計算機上創建本地用戶。 – user304582 2010-05-09 01:57:28

3

(Per Martin Smith的答案)我一直使用RUNAS/NETONLY來運行SSMS和BI開發工作室以及Visual Studio IDE和其他第三方應用程序,以針對我們未經過身份驗證的域上的服務器。我不確定爲什麼你不能這麼做 - 如果你使用集成安全性,你必須以某種方式在該域上使用SQL Server的帳戶。另外,我修改了其中一個主要的C#程序,使用CreateProcessWithLogonW和LOGON_NETCREDENTIALS_ONLY(How to build RUNAS /NETONLY functionality into a (C#/.NET/WinForms) program?),以便它提示輸入用戶名和密碼,然後重新啓動它自己。

使用相同的API,我還製作了RUNAS/NETONLY的一個版本,它將在命令行上接受密碼,因爲RUNAS不會在命令行上允許輸入密碼。顯然,這是一種固有的安全風險,我不經常使用它。

作爲一個完整的問題,還有一個很棒的外殼擴展:http://technet.microsoft.com/en-us/sysinternals/cc300361.aspx - 常規的Run As Shell擴展不能執行/ NETONLY的等效功能。

相關問題