IIS 7.5登录失败,用户登录无法打开显式指定的数据库?

时间:2014-02-20 05:36:48

标签: c# asp.net sql-server iis iis-7.5

我在iis 7.5中托管asp.net应用程序,我正在使用sql server 2008 R2,如果我在默认网站之外托管它并且当时将其应用程序池标识转换为本地系统我的连接字符串是< / p>

<add name="In****" connectionString="Data Source=PC\SQLEXPRESS;Database=*****;Integrated Security=SSPI;           Persist Security Info=false; Trusted_Connection=Yes;" providerName="System.Data.SqlClient"/>

当我尝试在默认网站下运行它时,我将其部署为相同但更改连接字符串,如

<add name="In*****" connectionString="Data Source=PC\SQLEXPRESS;Database=*****;User ID=****;Password=****;Trusted_Connection=False;"/>

但我得到错误,

Login failed for user 'IIS APPPOOL\DefaultAppPool'. Reason: Failed to open the explicitly specified database. [CLIENT: <local machine>]

我检查了很多并获得了很多解决方案,

1)更改数据库名称,然后通过重新启动sql服务与sa用户一起尝试。

2)我还创建了另一个用户而不是sa,并将其附加到此应用程序的数据库要求。

但错误仍然相同:(

3)我也得到了解决方案,在应用程序池中单击默认网站,然后进行高级设置,然后将其身份更改为网络服务。

在这次尝试中我得到了这个错误,

Login failed for user 'NT AUTHORITY\NETWORK SERVICE'. Reason: Failed to open the explicitly specified database. [CLIENT: <local machine>] 

希望你提前感谢。

2 个答案:

答案 0 :(得分:1)

将使用运行IIS应用程序池的用户的安全上下文建立与数据库的连接。在这种情况下,它是网络服务本地帐户,默认情况下使用该帐户。

我认为这在开发期间工作正常,因为您使用自己的用户运行Visual Studio,并且您的用户具有此数据库的权限。

有很多解决方案,其中一些不推荐用于生产环境,最后一个是我的实际建议:

  • 如果此数据库是本地数据库,则可以向网络服务帐户授予对数据库的权限。
  • 您可以使用自己的帐户作为您的网站的应用程序池将运行的用户,或
  • 这是推荐的一个:对于生产环境,您通常会创建域服务帐户(如果不在域控制器的范围内,则为本地帐户),在数据库中为其授予非管理员权限,但足以运行你的应用。然后使用相同的帐户运行应用程序池。

授予用户访问数据库的权限:http://technet.microsoft.com/en-us/library/ms172405(v=SQL.105).aspx

将用户分配到应用程序池:http://technet.microsoft.com/en-us/library/cc771170(v=WS.10).aspx

希望这澄清

答案 1 :(得分:0)

有一段时间我遇到了同样的问题。我的连接字符串专门指出了用于登录的用户和密码。但是在我的应用程序页面的一个我得到了同样的错误,其他所有工作都很好。

之前在我的测试服务器上运行得非常好所以我认为这可能是由于收到的更新?所以我开始卸载一些最新的.NET更新并发现: 初始错误:  用户'NT AUTHORITY \ ANONYMOUS LOGON'登录失败。

然后卸下KB2901126&amp; KB2898869错误更改为:  用户'DOMAIN \ COMPUTERNAME $'登录失败。

请注意,这两个更新都是安全补丁,可防止用户获得提升权限:

来自KB2901126

  

此更新解决了当用户访问经特殊设计的网站或包含特制网络内容的网站时可能允许特权提升的漏洞。

所以我想再次重新安装这两个更新,但是我收到了这条消息: Windows update error message

注意错误80244022。由于我的服务器和更新服务器之间的连接中断,发生此错误。有点奇怪,因为其他更新成功地设法下载并安装自己。

MS可能已删除更新?我不确定发生了什么,但我很确定这是因为MS更新而发生的。我的“工作”应用程序无法在2周内从工作状态转到1个损坏的页面,而我甚至不会更新该特定页面(或其后面的引用)中的代码。

我将尝试查看我的DEV计算机上的相同更新是否会破坏我的构建。

作为一种解决方法,我创建了一个域帐户并授予其访问数据库的权限,然后我将应用程序池切换到此域帐户。如果没有数据库权限,并且未编辑连接字符串,则特定页面上的错误更改为“DOMAIN \ new account”无法访问数据库。这证实了由于某种原因,特定页面和后面的代码忽略了UID&amp; PW在连接字符串中并使用集成安全性。