我刚刚迁移了一个开发工作站
- 来自:带有 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 上将本地网络服务帐户添加到数据库中。
希望能帮助到你。