我在IIS上检查了Integrated Windows authentication
的asp网页应用程序并清除了匿名访问框。从高级Windows身份验证我已Enable kernel-mode authentication
已检查。
应用程序池以管理域用户和集成模式运行。
当用户点击此应用内的某个网页时,我可以从日志中看到域用户名已发送到服务器,并且我还有Request.ServerVariables("AUTH_USER")
中的值。
一切都很好,应该如此。我可以看到哪个用户访问应用程序。
现在,网页也访问SQL数据库。 我有连接字符串,如:
"Provider=SQLOLEDB.1;Integrated Security=SSPI;..."
但是当我访问数据库时,我收到以下错误:
Microsoft OLE DB Provider for SQL Server错误“80040e4d”
用户'NT AUTHORITY \ ANONYMOUS LOGON'登录失败。
我怎么说,与sql server的连接是使用app pool帐户而不是匿名?
答案 0 :(得分:1)
我认为如果你检查网站的配置文件中的身份标签,你会发现它设置如下:
<identity impersonate="true"/>
在您的配置中应该是:
<identity impersonate="false"/>
这样你就告诉iis不要模仿通过网络远程登录但使用应用程序池中指定的帐户的人。
rules是一个页面,其中简要介绍了该主题。
答案 1 :(得分:1)
经过2天的测试,我终于设法让它发挥作用。 有两种形式的冒充: &#34; identity impersonate = false&#34;是应用程序在应用程序池中定义的用户或用户的上下文中运行。 但也有模拟应用程序池使用用户访问磁盘上的资源。它位于“基本设置”和“连接为”下。 默认是传递身份验证。 我不知道它与访问外部数据库有什么关系,但在将其设置为应用程序池的同一用户之后,现在一切正常。 我希望它会对某人有所帮助。