我有一个如下所示的连接字符串:
Server=.;Database=mydbname;Trusted_Connection=True;
当我使用Visual Studio(IIS Express)运行/调试我的应用程序时,这可以正常工作,但在部署到IIS-8
之后,它会在打开连接时抛出异常:
用户'IIS APPPOOL \ mysite'登录失败。
我很困惑,为什么会发生这种情况,为什么当数据库不需要时,IIS正在中间添加用户?为什么IIS Express
不会发生这种情况?
答案 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