ASP.NET 和 SQL Server 2008 中的错误“用户 'NT AUTHORITY\IUSR' 登录失败”

Posted

技术标签:

【中文标题】ASP.NET 和 SQL Server 2008 中的错误“用户 \'NT AUTHORITY\\IUSR\' 登录失败”【英文标题】:The error "Login failed for user 'NT AUTHORITY\IUSR'" in ASP.NET and SQL Server 2008ASP.NET 和 SQL Server 2008 中的错误“用户 'NT AUTHORITY\IUSR' 登录失败” 【发布时间】:2010-11-19 04:11:48 【问题描述】:

我的 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 托管,如果这有所不同的话。当 DB 和 IIS 也在同一台物理机器上时,问题重现。

【问题讨论】:

【参考方案1】:

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

我对您的错误消息感到有些困惑。说实话,我不认为当数据库在另一个盒子上时,你会看到Login Failed for NT AUTHORITY\ANONYMOUS LOGON以外的任何东西。

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

【讨论】:

我只是在测试它是否可以在同一个盒子上工作 - 在生产中,拓扑最好被描述为蔓延。无论如何,你成功了——我必须为 machineName$ 添加权限。谢谢! 只是想添加类似的内容,我通过为在 IIS 6.0 网站->属性->目录安全->编辑(身份验证...)中找到的 IUSER 用户名创建权限来解决此问题,即 IUSR_MACHINENAME 你是如何在VS中为MachineName$添加权限的【参考方案2】:

如果它对某人有帮助,请在 web.config 中添加 <identity impersonate="false" /> 以消除此错误(在 <system.web> 下)

【讨论】:

【参考方案3】:

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

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

    确保在您的 IIS Web 服务器上启用 ASP.NET 模拟:

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

    <system.web>
        <identity impersonate="true" userName="your_service_acct" password="***" />
    </system.web>
    

    以上步骤假定您在 MSSQL 上为“your_service_acct”设置了 SQL 登录并具有权限

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

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

【讨论】:

不!当有不同的用例(例如使用机器帐户授权)时,您不建议使用用户名和密码。【参考方案7】:

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

可信连接=false

集成安全=True

【讨论】:

【参考方案8】:

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

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

【讨论】:

以上是关于ASP.NET 和 SQL Server 2008 中的错误“用户 'NT AUTHORITY\IUSR' 登录失败”的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 asp net core 2 连接到 SQL Server 2008?

ASP.NET 应用程序连接字符串和 SQL Server 安全/权限

ASP.Net 成员资格 SQL Server

SQL Server 2008 中的事务问题

sql server 2008和mysql的区别

为 asp.net 应用程序连接 sql server(Windows 身份验证与 SQL Server 身份验证)的最佳方式