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

4

我有一个连接字符串,看起来像这样:

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

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

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

我很困惑为什么会发生这种情况,为什么在数据库不需要用户的情况下,IIS会在中间添加其用户,以及为什么在使用IIS Express时不会出现此问题?


IIS Express 可以使用您的用户。IIS 使用应用程序池用户。请为 IIS APPPOOL\mysite 添加 SQL Express 权限以访问数据库。 - VikciaR
请看这里:http://www.technologycrowds.com/2013/03/login-failed-for-user-iis.html#.UrYGXfRDvkN - Ani
我正在使用 SQL Server 2012 Enterprise,您能否请稍微解释一下如何将此权限添加到 SQL 中?并且每次更改应用程序池时,我需要更改它吗? - user971741
另外,将 Trusted_Connection 设为 False,因为在连接字符串中设置 Trusted_Connection=true 会用 IIS Identity 用户配置文件覆盖 SQL 认证值。 - Ani
@Ani尝试了链接中的解决方案,但仍然出现错误,但现在已更改为“登录失败,用户为'NT AUTHORITY\LOCAL SERVICE'”。 - user971741
3个回答

8
你正在使用 Trusted_Connection=True,因此将用户 ApplicationPoolIdentity 或 IIS APPPOOL\mysite 提供给 SQL server。 选项1. 在 SQL server 中授予 IIS APPPOOL\mysite 权限。 选项2. 使用 User Id=User_Id;Password=****** 替代 Trusted_Connection=True

但是我的 SQL Server 已经设置为 Windows 身份验证模式,没有用户名和密码,我应该创建一个吗? - user971741

4
这是因为您要求使用受信任的连接进行连接,这意味着执行代码的操作系统用户将是连接到数据库的用户。在IIS的情况下,操作系统用户通常在IIS应用程序池中定义,除非您已指定在web.config中使用模拟。默认情况下(为了防止安全问题),用于IIS应用程序池的默认身份具有非常有限的功能。根据您的配置(SQL服务器与IIS的关系(同一台机器、不同的机器)),您可能需要为应用程序池指定不同的身份和/或授予访问SQL Server的权限给应用程序池身份。此 Microsoft article 包含有关如何配置ASP.Net模拟的其他信息。我们总是将Web应用程序配置为模拟域用户,以便我们可以访问远程机器上的数据库和其他资源,而无需影响IIS应用程序池设置。

让应用程序池在域服务帐户下运行可能是正确的方法。+1 - BrokenGlass

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接