让IIS7连接到Sql2008有一个非常奇怪的问题。
首先,使用VS2010中的默认web服务器,在HTTPModule中,从web.config加载连接字符串,并访问数据库。效果很好。(连接字符串使用集成安全性= SSPI)
但是由于这个网站有一些#include,所以我需要在IIS中调试它,所以我从默认的web服务器切换到IIS。其他的一切都一样。但是,当我试图在SqlConnection中打开同一个HTTPModule时,我发现提供的凭据不是用户,而是机器名。
环境是虚拟机器;Windows 7 64位;IIS7;VS2010;SQL2008
有人能告诉我这是在什么地方或者是怎么设置的吗?Thx
发布于 2011-06-07 14:39:19
在Visual中运行应用程序时,应用程序以" you“的形式运行。如果您的凭据足以连接到数据库,那么使用Integrated就可以登录。
当您转移到IIS时,IIS将根据您的配置以不同的身份运行进程(但很可能不是“您”)。你有几种选择:
1)给予默认用户IIS在访问数据库的权限下运行(不推荐)
2)将IIS配置为以“您”的身份运行应用程序,或将其配置为专门配置为运行进程的专用用户。
http://technet.microsoft.com/en-us/library/cc771170(WS.10).aspx
3)不使用集成安全性,使用SQL安全性。
这里有一篇文章描述了如何确定在什么用户IIS下运行。
http://blogs.iis.net/davcox/archive/2009/08/12/what-is-my-iis-code-running-as.aspx
发布于 2011-06-07 23:44:38
对任何遇到我同样问题的人来说。
首先,我试图运行存储过程的地方在一个HTTPModule中。此外,我还使用IIS的本地副本进行调试。注意,在VS2010附带的默认IIS服务器中,它运行正常,但在IIS中,它坏了。
显然,您无法在Sql2008的BeginRequest方法中访问远程HTTPModule。它必须在PostRequestHandlerExecute方法中。
其次,我将IIS身份验证设置为包含用户IUSR的AnonymousAuthentication。
另外,我只为该网站添加了ASP.NET模拟,并且该用户对数据库具有权限。
https://stackoverflow.com/questions/6266810
复制相似问题