现在的环境:
l 一台windows 2k3 +Sqlserver2005
l 两台windows 2k3 + web程序(两台机器机器部署相同的Web程序)
前面三台机器在微软域中。
l 广大用户的浏览器(在Internal中)
需求:
广大用户匿名访问Web程序,在IIS处配置为匿名访问,用户为机器名"IUSER_机器名,数据库要用Windows集成验证方式。
初期尝试
Web.config里:配置为Windows集成验证,模拟设为True:
<add key="ConnectionString" value="Data Source=DBServerName;Initial Catalog=ditu;Integrated Security=SSPI;Persist Security Info=False"/>
<identity impersonate="true"/>
<authentication mode="Forms">
<forms name="forums" path="/" loginUrl="~/Admin/Login.aspx" protection="All" timeout="40">
</forms>
</authentication>
在数据库端我们已经把Network service 帐户及两台Web 服务器加为ditu数据库的Dbo.
关于如何将Web服务器添加为ditu数据库的登陆用户:
在web 端我们已经设置虚拟目录为匿名登录,并设置匿名用户为Iuser_machinename 帐户。
遇到的问题及尝试方法:
但是我们遇到的问题是:Web程序不能登陆到连接数据库
如果采用Sqlserver验证或匿名用户里单独设置一个域帐户,访问数据库都没有问题
进一步尝试,如果经匿名用户改为其他有权限访问数据库的域用户,程序能够正常访问,
如果数据库服务器和web服务器在同一台机器上访问没有问题!
将匿名帐户添加到数据库的登陆用户里,在Xp上访问没有问题,但在Window2k3上访问依然提示输入登陆用户的对话框,想必这点是xp的安全性不如Win2k3吧,但即使行,把匿名帐户添加为数据库的登陆帐户也是不允许的!
我想问题一定出在身份验证上,从网站上狂搜,结果还没有更好的解决方案!
最后终于发现 在windows 2k3 上,在web.config里必须添加<identity impersonate="false"/>
如果是xp, 则在web.config里必须添加<identity impersonate="true" userName="NT AUTHORITY"NETWORK SERVICE"/>
事后仔细想想确实是这个道理,因为数据库和web服务器是分开的,在Win2k3里,创建虚拟目录时是要需要设置应用程序池的,你如果impersonate="true",则访问数据库将要用webServericeName/Iuser_machinename 作为登陆名,如果设为false,将用进程的帐户(即应用程序池账户)访问数据库,而默认的应用程序池账户就是Network service 帐户,我们已经把Network service 帐户添加为数据库的登陆账户了,所以安全认证是没有问题的
在Xp的虚拟目录里是没有应用程序池的,我们只能启用匿名,并将匿名账户在web.config里显性的指为NT AUTHORITY"NETWORK SERVICE(网络进程账户)