我有一个连接字符串,如下所示:
Server=.;Database=mydbname;Trusted_Connection=True;当我使用Visual (IIS Express)运行/调试我的应用程序时,这很好,但是在通过IIS-8进行部署之后,它会在打开连接时抛出一个异常:
用户“IIS APPPOOL\mysite”登录失败。
我不明白为什么会发生这种情况,为什么IIS在数据库不需要用户的情况下在中间添加它的用户,以及为什么IIS Express没有这样做?
发布于 2013-12-21 21:23:52
您使用的是Trusted_Connection=True,因此用户ApplicationPoolIdentity或IIS APPPOOL\mysite被提供给server。
选项1.在SQL server中向IIS APPPOOL\mysite授予权限。
选项2.使用User Id=User_Id;Password=******而不是Trusted_Connection=True
发布于 2013-12-21 21:25:31
之所以会发生这种情况,是因为您要求使用可信连接来建立连接,这意味着正在执行代码的操作系统用户将与数据库连接。
对于IIS,除非您指定了要在web.config中使用的模拟,否则操作系统用户通常是在impersonation中定义的。
默认情况下(为了防止安全问题),用于IIS应用程序池的默认标识的功能非常有限。根据您的配置(其中SQL server相对于IIS (同一台机器,不同的计算机),您可能需要为应用程序池指定不同的标识和/或您可能需要授予访问SQL Server到应用程序池标识的权限。
此Microsoft article具有有关如何配置ASP.Net模拟的其他信息。
我们总是将web应用程序配置为模拟域用户,以便可以访问远程计算机上的数据库和其他资源,而不必影响IIS应用程序池设置。
发布于 2013-12-21 21:24:07
让Trusted_Connection=true在连接字符串中使用Identity用户配置文件覆盖SQL身份验证值。
设置Trusted_Connection=false
https://stackoverflow.com/questions/20723623
复制相似问题