C# 使用Windows身份验证从非域计算机访问SQL Server 2005
我有一个Windows域,其中一台计算机正在运行SQL Server 2005,并且配置为仅支持Windows身份验证。我希望在同一网络上但不在域上的计算机上运行C#客户端应用程序,并访问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
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。