怎么实现用户匿名访问web,但数据库要用Windows集成验证方式(数据库和web服务器分别在两台机器上)

  前段时间做个项目,要求:用户匿名访问站点,数据库验证出采用Windows集成验证方式,数据库服务器和Web服务器分别在两台不通的机器上,但在一个域环境中,经过了一个多星期的尝试才最终实现了,下面是详细的步骤,希望给有这种需求的朋友一个提示,不用再走我的弯路了!

现在的环境:

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(网络进程账户)

原文地址:https://www.cnblogs.com/dwfbenben/p/1225244.html