使用Windows身份validation从非域计算机访问SQL Server 2005

我有一个Windows域,其中一台机器运行SQL Server 2005,并configuration为只支持Windows身份validation。 我想在同一networking上的机器上运行C#客户端应用程序,但不在域上,并访问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:用户“domain \ user”login失败,服务器端错误为:错误18456,严重性14,状态5

我已经尝试了各种各样的东西,包括将集成安全性设置为true和false,而不是用户id中的\,但没有成功。

一般来说,我知道有可能从非域机器连接到SQL Server 2005实例(例如,我正在使用一个基于Linux的应用程序,很高兴地这样做),但我似乎无法了解如何从Windows机器上完成。

使用Management Studio通过Windows身份验证连接到另一个域上的服务器时,需要在启动应用程序时使用“runas”工具。

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

也许你可以尝试一个类似的东西开始你的应用程序?

(Per Martin Smith的答案)我一直使用RUNAS / NETONLY来运行SSMS和BI开发工作室以及Visual Studio IDE和其他第三方应用程序,这是针对我们没有进行身份验证的域上的服务器。 我不知道为什么你不能这样做 – 如果你正在使用集成的安全性,你必须以某种方式拥有一个与SQL server一起工作的域。

另外,我修改了一个主要的C#程序,使用CreateProcessWithLogonW和LOGON_NETCREDENTIALS_ONLY( 如何在(C#/ .NET / WinForms)程序中构建RUNAS / NETONLY功能? ),以便提示输入用户名和密码,然后重新启动本身。

使用相同的API,我也做了一个版本的RUNAS / NETONLY,它将接受命令行上的密码,因为RUNAS不会在命令行上输入密码。 显然,这是一个固有的安全风险,我不经常使用它。

作为一个完整的问题,也有这个很好的外壳扩展: http : //technet.microsoft.com/en-us/sysinternals/cc300361.aspx – 常规运行外壳扩展没有能力做等效/ NETONLY。

可以在每台机器上用相同的用户名和密码创建一个本地用户一旦创建了这些用户,就可以让SQL服务器上的用户访问SQL服务器,在另一台机器上,您的应用程序必须以新创建的方式运行用户,如果是一个Web应用程序,只需更改应用程序池设置。

你有没有尝试连接machineName \ UserName? 我也想象这样的用户应该在SQL数据库中创建正确的?