19

我的 ASP.NET v3.5 Web 应用程序在尝试打开与 SQL Server 2008 数据库的连接时抛出以下异常:

System.Data.SqlClient.SqlException:无法打开登录请求的数据库“MyDbName”。登录失败。用户“NT AUTHORITY\IUSR”登录失败。

问题是,我已经添加NT AUTHORITY\IUSR到服务器的登录列表和数据库的用户列表中。对于服务器,我已授予用户 Public 角色,对于数据库,我已授予db_datareader权限。

我也为 授予了相同的权限NT AUTHORITY\NETWORK SERVICE,这是应用程序池在其下运行的标识。

Web 应用程序由 IIS7 托管,如果这有所不同的话。当数据库和 IIS 也在同一台物理机器上时,该问题也会重现。

4

8 回答 8

10

这里的诀窍是NT AUTHORITY\NETWORK SERVICE实际上在数据库中显示为DOMAINNAME\MACHINENAME$(注意$符号!)。也就是说,当您从 Web 服务器跨越机器边界到 SQL Server 时,如果您使用NETWORK SERVICEor帐户,SQL Server 会看到机器帐户LOCAL SYSTEM。如果您使用任何其他非域帐户,SQL Server 将不会收到您的凭据。

我对你的错误信息有点困惑。说实话,我不认为当数据库在另一个盒子上时,你会看到除Login Failed for NT AUTHORITY\ANONYMOUS LOGON.

IUSR用于匿名网站,不能通过网络传递到 SQL Server。如果您在同一台机器上做所有事情,您可能会找到一种工作方式,但我永远不会知道,因为我永远不会那样做...... ;-)

于 2009-08-13T02:56:58.640 回答
5

如果它对某人有帮助,我在web.config中添加<identity impersonate="false" />了这个错误以消失(在 下<system.web>

于 2015-01-06T05:33:02.200 回答
3

请务必注意,如果您没有将 IIS 配置为允许模拟,但您的 web.config 尝试进行模拟,您将收到此错误,就像我刚才所做的那样。

我刚刚遇到了这个确切的错误,并且需要以下所有步骤:

  1. 确保在 IIS Web 服务器上启用 ASP.NET 模拟:在此处输入图像描述

  2. 将其与配置您的站点以使用模拟 (web.config) 相结合:

    <system.web>
        <identity impersonate="true" userName="your_service_acct" password="***" />
    </system.web>
    
  3. 上述步骤假定您在 MSSQL 上为“your_service_acct”设置了具有权限的 SQL 登录

当在 localhost、localdb 甚至您个人拥有权限的远程 db 上运行时,开发 IIS 就像您一样运行 - 一切都神奇地工作。因此,在调试模式下,您不需要创建特殊的 web.config..

一旦您将站点部署到某种服务器(在我的例子中,我们的 TEST 环境)上,您可能需要完成我刚才详述的上述步骤,因为 IIS 将尝试以应用程序池用户的身份进行连接,即从行政上讲,通常不是您想要的。因此,这就是您想要开始使用web.config 转换identity impersonate="true"的时候,因此 Visual Studio 将在您的“发布...”部署步骤中插入适当的。

于 2018-10-09T12:53:35.030 回答
2

我建议创建一个单独的(最好是域)帐户并在连接字符串中指定它(通常在 web.config 中)然后您可以限制 Web 服务器上的权限该帐户可以做什么和不能做什么。然后,您可以在 SQL Server 中授予此帐户所需的权限。

于 2009-08-13T07:27:58.567 回答
0

我遇到了同样的问题,并通过更改应用程序池解决了这个问题。

于 2014-04-16T07:40:35.660 回答
0

而不是Integrated Security=True;在连接字符串中使用,只需使用用户名和密码身份验证user=sa; pwd=mypassword;

于 2015-07-22T08:00:30.353 回答
-1

简单的解决方案是检查您的 web.config 文件并确保其中之一是 db 连接字符串的一部分:

可信连接=false

或者

综合安全=真

于 2011-10-18T06:26:35.713 回答
-1

当您在最后一个数据库上恢复新数据库时会出现此问题。

要解决此问题,您必须转到 sqlserver,然后转到安全性,然后再次设置您的应用程序池。

于 2014-05-17T10:26:23.560 回答