客户端可以连接 .Net程序不能连接SQL Server 2000
工作机器(开发ASP.Net程序,.Net Framework
1.1)在域里面,SQL 2000服务器不在域中,突然出现SQL企业管理器和查询分析器都可以连接到SQL
2000服务器,而.Net程序则连不上,报错“SQL Server服务器不存在或拒绝访问”。
以前好像也这样用过,并没有出问题,看来可能跟域的控制策略有关系,这段时间公司域策略调整比较频繁,没有登陆域的机器和域里面机器的互访渐渐出问题。
折腾了一阵没有结果,后来猜想也许是ASP.Net使用的帐号不能通过SQL
2000服务器验证的问题。其实一直也不会怀疑这方面,因为Client连SQL
Server服务器时,使用的是网络端口(默认1433端口)通讯,不需要SQL Server所在服务器操作系统的用户验证。
测试如下:
1. 我的域帐号是可以完全访问控制SQL
2000服务器的机器的。在工作机的C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG里面,把
machine.config文件中processModel节点的userName改为我的域帐号,password设为我的域帐号的密码,重启IIS
后登陆系统,成功。任务管理器里面显示asp_net进程的启动用户为我的域帐号。
2.
在工作机上建立一个Windows帐号ASPNETTest,加入到Administrators组中(注意帐号第一次登陆系统必须修改密码的选项要去
掉),设置密码(假设为qazQAZ123)。将C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\
CONFIG的machine.config用户名修改为ASPNETTest,密码设为这个帐号的密码(qazQAZ123)。在SQL
2000服务器上建立一个Windows帐号ASPNETTest,密码设成跟工作机一致(qazQAZ123),也加入到Administrators
组中。重启IIS后登陆系统,成功。任务管理器里面显示asp_net进程的启动用户为ASPNETTest。
SQL 2000服务器的Security里面,设置的是SQL Server
and Windows。如果说上面的测试跟这个有关系的话也是说不通的,程序的连接字符串里面指定SQL Server认证方式,如果SQL
Server的帐号、密码不正确,会连不上SQL Server,只能说在这种情况下,SQL Server认证和Windows认证都需要通过。
另外,ASP.Net将工作机上自己使用的帐号、密码认证信息发送给SQL 2000服务器进行Windows认证,感觉也怪怪的。是ASP.Net在这样做,还是因为域的安全控制策略导致了一个Windows的认证过程?