在IIS上,应用程序无法打开SQL连接

时间:2013-12-21 21:15:10

标签: c# asp.net-mvc-4 iis sql-server-2012

我有一个如下所示的连接字符串:

Server=.;Database=mydbname;Trusted_Connection=True;

当我使用Visual Studio(IIS Express)运行/调试我的应用程序时,这可以正常工作,但在部署到IIS-8之后,它会在打开连接时抛出异常:

  

用户'IIS APPPOOL \ mysite'登录失败。

我很困惑,为什么会发生这种情况,为什么当数据库不需要时,IIS正在中间添加用户?为什么IIS Express不会发生这种情况?

3 个答案:

答案 0 :(得分:7)

您正在使用Trusted_Connection=True,因此将用户ApplicationPoolIdentity或IIS APPPOOL\mysite提供给SQL服务器。

选项1。为SQL Server中的IIS APPPOOL\mysite授予权限。

选项2。使用User Id=User_Id;Password=******代替Trusted_Connection=True

答案 1 :(得分:5)

这是因为您要求使用可信连接建立连接,这意味着正在执行代码的操作系统用户将是连接到数据库的用户。

对于IIS,操作系统用户通常在IIS应用程序池中定义,除非您已指定要在web.config中使用模拟。

默认情况下(为了防止出现安全问题),IIS应用程序池使用的默认标识功能非常有限。根据您的配置(SQL服务器与IIS相关的位置(相同的计算机,不同的计算机),您可能需要为应用程序池指定不同的标识和/或您可能需要授予访问SQL Server到应用程序的权限池身份。

Microsoft article提供了有关如何配置ASP.Net模拟的其他信息。

我们始终将我们的Web应用程序配置为模拟域用户,以便我们可以访问远程计算机上的数据库和其他资源,而不必影响IIS应用程序池设置。

答案 2 :(得分:1)

在连接字符串中使用Trusted_Connection=true将使用IIS标识用户配置文件覆盖SQL身份验证值。

设置Trusted_Connection=false