本以为很简单。
事情是这样的。
项目需要用户使用ad 登录web 系统, 查询数据库信息和产生report 。 这个数据库不是和website 同一台机器 , 因为是中央服务器, 必须使用ad 登录(大部分用户实际上是不能登录的 )。
我很快开发这个系统并且setup 。
website 的config 设定为
<identity impersonate="true" />
<authentication mode="Windows"></authentication>
site 去掉匿名登录 ,使用集成window 登录。
结果发现不能登录sqlserver ( 确定这个用户有权限登录) , 出现错误是 使用 network service不能登录 sqlserver 。
晕 , impersonate="true" 情况下, 基本认证在iis6 应该是 可以传递网络凭证的呀。 也就是 request 的信息也应该会传递给sqlserver 才对。
google 了一下, 发现可能是 集成验证的协议问题。 用的实际上是 ntlm ,不是Kerberos 协议( 我代码测试看到是 Negotiate) 。 后面搞不懂了。
只好使用basic 认证了, 这个是没有问题的。( 又有安全问题, 明码呀)
http://www.derkeiler.com/Newsgroups/microsoft.public.inetserver.iis.security/2004-07/0156.html