zoukankan      html  css  js  c++  java
  • 怎么实现用户匿名访问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(网络进程账户)

  • 相关阅读:
    方法名的string类型应用(补)
    unity3D里面的点乘和叉乘
    C# 计算时间日期
    iOS设备屏幕分辨率分布
    免证书发布ipa文件真机测试
    unity3D +php +数据库
    windows下mysql5.1忘记root密码解决方法[win7]
    springboot配置多数据源(JdbcTemplate方式)
    【转】Google Chrome中顺时针/逆时针滚动圆的含义
    Redis内存模型(2):存储细节
  • 原文地址:https://www.cnblogs.com/dwfbenben/p/1225244.html
Copyright © 2011-2022 走看看