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 SERVICE
或 LOCAL 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(Windows 身份验证与 SQL Server 身份验证)的最佳方式