【问题标题】:IIS 7 not connecting to Sql2008IIS 7 未连接到 Sql2008
【发布时间】:2011-06-07 14:31:03
【问题描述】:

让 IIS7 连接到 Sql2008 时遇到一个非常奇怪的问题。

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

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

环境是虚拟机器;视窗 7 64 位; IIS7; VS2010; SQL2008

谁能告诉我这是在哪里或如何设置的? 谢谢

【问题讨论】:

    标签: visual-studio-2010 sql-server-2008 iis-7 c#-4.0


    【解决方案1】:

    当您在 Visual Studio 中运行应用程序时,应用程序会以“您”的身份运行。如果您的凭据足以连接到数据库,那么您就可以使用 Integrated Security 登录。

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

    【讨论】:

    • 感谢您的意见,但不是不使用集成安全性的选项。请参阅下面的答案。
    • 澄清 - 我的答案中的选项 1) 和 2) 也适用于集成安全性。 1)不推荐(但它会工作)。 2) 可能是你最终需要做的。
    • 无法早点发布我的答案。见下文,它提供了详细信息,但在一般意义上,答案二是正确的
    【解决方案2】:

    对于遇到与我相同的问题的任何人。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-17
      • 2010-10-07
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-27
      相关资源
      最近更新 更多