C# 使用Windows身份验证从非域计算机访问SQL Server 2005

C# 使用Windows身份验证从非域计算机访问SQL Server 2005,c#,sql-server,windows,security,dns,C#,Sql Server,Windows,Security,Dns,我有一个Windows域,其中一台计算机正在运行SQL Server 2005,并且配置为仅支持Windows身份验证。我希望在同一网络上但不在域上的计算机上运行C#客户端应用程序,并访问SQL Server 2005实例上的数据库 我认为做这样的事情很简单: string connectionString = "Data Source=server;Initial Catalog=database;User Id=domain\user;Password=password"; SqlConne

我有一个Windows域,其中一台计算机正在运行SQL Server 2005,并且配置为仅支持Windows身份验证。我希望在同一网络上但不在域上的计算机上运行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:用户“域\用户”登录失败 服务器端错误是:错误18456,严重性14,状态5

我尝试过各种方法,包括将集成安全设置为true和false,以及在用户Id中设置\而不是\但都没有成功


一般来说,我知道可以从非域计算机连接到SQL Server 2005实例(例如,我正在使用一个基于Linux的应用程序,它很乐意这样做),但我似乎无法从Windows计算机上解决这一问题。

您尝试过使用machineName\UserName连接吗?我还可以想象这样一个用户应该在SQL数据库中创建,正确吗?

当通过Windows身份验证连接到另一个域上的服务器时,启动应用程序时需要使用“runas”功能

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

也许您可以在启动应用程序时尝试类似的操作?

一旦创建了具有相同用户名和密码的本地用户,就可以在每台计算机上创建一个本地用户,并授予SQL server计算机上的用户访问SQL server的权限,在您的另一台计算机上,您的应用程序必须作为新创建的用户运行,如果是web应用程序,只需更改应用程序池设置即可

(根据Martin Smith的回答)我一直只使用RUNAS/NETONLY对我们未进行身份验证的域上的服务器运行SSM、BI-dev studio和Visual studio IDE以及其他第三方应用程序。我不知道为什么您不能这样做-如果您使用集成安全性,您必须在该域上拥有一个与SQL Server一起工作的帐户

此外,我修改了我的一个主要C#程序,将CreateProcessWithLogonW与LOGON_NETCREDENTIALS_ONLY()一起使用,以便它提示输入用户名和密码,然后重新启动自己

使用相同的API,我还制作了一个版本的RUNAS/NETONLY,它将在命令行上接受密码,因为RUNAS不允许在命令行上使用密码。显然,这是一种固有的安全风险,我不经常使用它


作为一个完整性问题,还有一个很棒的shell扩展:-常规的运行方式shell扩展没有与/NETONLY等效的功能。

Hi-有趣的想法,但我没有-SQL Server实例中没有machineName\UserName用户。您正在尝试与SQL Server连接什么类型的应用程序?Web app?它只是一个C#应用程序,我可以通过Visual Studio或在命令行运行。嗨-很遗憾,我没有能力在客户端或SQL Server计算机上创建本地用户。嗨-很有趣,但我在这里不可能使用runas。