SQL Server 2000 + ASP.NET:用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败

SQL Server 2000 + ASP.NET:用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败

我刚刚迁移了一个开发工作站

  • 来自:带有 IIS 6 的 Windows XP Pro SP3
  • 至:Vista Enterprise 64 位和 IIS 7

自移动以来,我的一个访问 SQL Server 2000 数据库的页面从我的 ASP.NET 2.0 网页收到以下错误:“用户‘NT AUTHORITY\ANONYMOUS LOGON’登录失败。”

我有:

  • 在 IIS 和 web.config 中启用 Windows 身份验证
  • 在 IIS 中禁用匿名身份验证
  • 设置模拟以作为经过身份验证的用户运行
  • 验证登录用户(在本例中为我)是否有权访问 SQL Server 上的相应数据库
  • 通过检查 User.Identity.Name 和 System.Security.Principal.WindowsIdentity.GetCurrent().Name (均显示我的用户名)验证我的登录和模拟信息在 ASP.NET 页面中是否正确

我使用 SqlConnection 的连接字符串是“Server={SERVER_NAME};Database={DB_NAME};Integrated Security=SSPI;Trusted_Connection=True;”

为什么尝试使用 NT AUTHORITY\ANONYMOUS LOGIN 登录?我不得不假设它是 IIS7 特有的某些设置或 web.config 条目,因为它在迁移之前运行良好。

注意:SQL Server 仅为 Windows 身份验证 - 没有混合模式或仅限 SQL。

答案1

在我看来,约束委派没有启用:配置服务器以进行委派

答案2

我知道回复有点晚了,但我也遇到了同样的问题并解决了。想与大家分享。

我可以理解为什么您可能不想引入 SQL 身份验证,因为客户端可能不赞成这样做。

要使 Windows 身份验证正常工作,您可以按照以下步骤操作:

1)在 web.config 中指定对 Windows 的身份验证

2)在 web.config 中将身份模拟为 true

3)为应用程序创建一个新的域虚拟用户,例如[电子邮件保护],使用一些密码

4)在模拟部分,指定此用户 ID 和密码

5)在 IIS 中,删除匿名访问并检查集成 Windows 身份验证

6) 使用 aspnet_regiis -ga "mydomain\username" 为该新用户提供对 IIS 元数据库的访问权限

7) 允许该用户访问虚拟目录的物理目录。您需要在那里添加该用户。

8)请注意,如果您的应用程序正在写入某些日志文件,您还需要提供“写入”权限

9)请注意,如果您的应用程序正在访问某些数据库并执行某些存储过程,则需要将此用户添加到具有应用程序数据库的 dbowner 权限的 sql server 登录中。

此外,您可能不想通过提供对 NT Authority/Anonymous Logon 的访问权限而陷入安全陷阱,因此在这种情况下创建您自己的应用程序用户会有所帮助。

我希望它有所帮助,如果它确实要求你将其作为“答案”

答案3

我遇到了同样的问题,使用的是 SQL Server 2008 DB。虽然可能有不同的方法可以解决这个问题,但多亏了 Adam 的链接,我找到了这一节,解决了我的情况:

5) Windows 身份验证默认在内核中执行。这可能会导致在初始请求时发送凭据的 HTTP 客户端失败。

IIS 7.0 内核模式身份验证在 IIS 7.0 中默认启用。这提高了 Windows 身份验证的性能,并简化了 Kerberos 身份验证协议的部署。但是,由于内核模式身份验证的设计限制,这可能会导致某些在初始请求中发送 Windows 凭据的客户端失败。普通浏览器客户端不受影响,因为它们始终以匿名方式发送初始请求。

注意:此重大变化适用于经典模式和集成模式。

在 IIS 管理器中禁用“内核模式”解决了该问题,并正确发送了凭据。

答案4

也许在 SQL 上将本地网络服务帐户添加到数据库中。

希望能帮助到你。

相关内容