2011-06-07 57 views
0

我有一个奇怪的问题,让IIS7连接到Sql2008。IIS 7没有连接到Sql2008

首先,使用VS2010中的默认Web服务器,在HTTPModule我从web.config加载连接字符串,并访问数据库。效果很好。 (连接字符串使用集成安全= SSPI)

但是因为网站有一些#includes,我需要在IIS中调试它,所以我从默认的web服务器切换到IIS。其他一切都是一样的。但是,当我尝试在HTTPModule中打开相同的SqlConnection时,我发现提供的凭据不是用户,而是机器名称。

环境是Virtul机器; Windows 7 64位; IIS7; VS2010; SQL2008

任何人都可以给我任何想法在哪里或如何设置? Thx

回答

0

当您在Visual Studio中运行应用程序时,应用程序以“您”的身份运行。如果您的证书足以连接到数据库,那么使用集成安全性,您将能够登录。

当您移到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

+0

感谢您的输入,但没有选择不使用集成安全性。请参阅下面的答案。 – edepperson 2011-06-07 20:00:46

+0

澄清 - 我的答案中的选项1)和2)也适用于集成安全性。 1)不推荐(但它会工作)。 2)可能是你最终需要做的。 – 2011-06-07 21:49:36

+0

无法提前发布我的答案。见下文,它提供了详细信息,但从一般意义上来说,答案是正确的 – edepperson 2011-06-07 23:46:09

0

对于运行到我做了同样的问题的人。

首先,我尝试运行存储过程的地方是在HTTPModule中。另外我正在使用我的本地IIS副本进行调试。请注意,在VS2010附带的默认网络服务器中,它运行良好,但在IIS中打破了。

您显然无法访问HTTPModule的BeginRequest方法中的远程Sql2008。它必须位于PostRequestHandlerExecute方法中。

其次,我将IIS身份验证设置为包括 AnonymousAuthentication与用户IUSR。
另外我只为网站添加了ASP.NET模拟,并且该用户对数据库拥有权限