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

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

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

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

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

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

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

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

选项2.使用User Id=User_Id;Password=******而不是Trusted_Connection=True

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

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

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

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

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

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

设置Trusted_Connection=false