Sql server SQL Server返回错误";用户登录失败';NT授权\匿名登录'&引用;在Windows应用程序中

Sql server SQL Server返回错误";用户登录失败';NT授权\匿名登录'&引用;在Windows应用程序中,sql-server,security,sqlconnection,Sql Server,Security,Sqlconnection,一个工作正常的应用程序(在大约6个月左右的时间里没有进行任何积极的开发)最近开始无法连接到数据库。操作管理员无法说出可能会导致问题的更改 客户端应用程序使用集成安全性为True的硬编码连接字符串,但当应用程序尝试创建到数据库的连接时,它抛出一个SQLException,表示“用户NT权限\匿名登录登录失败” 我可以通过ManagementStudio在此帐户上登录到数据库,没有问题。我在本期中看到的所有内容都是针对ASP.NET项目的,这显然是“双跳问题”,作为一个客户机应用程序最好不要成为问题

一个工作正常的应用程序(在大约6个月左右的时间里没有进行任何积极的开发)最近开始无法连接到数据库。操作管理员无法说出可能会导致问题的更改

客户端应用程序使用集成安全性为True的硬编码连接字符串,但当应用程序尝试创建到数据库的连接时,它抛出一个SQLException,表示“用户NT权限\匿名登录登录失败”

我可以通过ManagementStudio在此帐户上登录到数据库,没有问题。我在本期中看到的所有内容都是针对ASP.NET项目的,这显然是“双跳问题”,作为一个客户机应用程序最好不要成为问题。任何帮助都将不胜感激

编辑 客户端计算机和服务器计算机以及用户帐户位于同一域上。 这在Windows防火墙关闭时发生

主导理论是:
服务器大约在一周前重新启动,未能注册服务主体名称(SPN)。未能注册SPN可能会导致集成身份验证退回到NTLM而不是Kerberos。

我认为用于对数据库进行身份验证的AD组中一定发生了一些更改。将格式为domain\webservername$的web服务器名称添加到有权访问数据库的AD组。此外,还要尝试将web.config属性设置为“false”。希望能有帮助

编辑:按照您编辑的内容进行操作。。这很可能表明SQL Server的身份验证协议已从Kerberos(默认情况下,如果您使用的是Windows集成身份验证)退回到NTLM。要使用Kerberos服务,必须在Active Directory目录服务中注册主体名称(SPN)。服务主体名称(SPN)是服务器上运行的服务的唯一标识符。将使用Kerberos身份验证的每个服务都需要为其设置SPN,以便客户端可以在网络上识别该服务。它在Active Directory中以计算机帐户或用户帐户注册。尽管Kerberos协议是默认协议,但如果默认协议失败,将使用NTLM尝试身份验证过程

在您的场景中,客户端必须进行tcp连接,并且它很可能在LocalSystem帐户下运行,并且没有为SQL实例注册SPN,因此使用了NTLM,但是LocalSystem帐户继承自系统上下文,而不是真正基于用户的上下文,因此,由于“匿名登录”而失败

若要解决此问题,请要求域管理员手动注册SPN(如果您的SQL Server在域用户帐户下运行)。 以下链接可能对您有更多帮助:


如果您的问题是与链接服务器有关,那么您需要考虑以下几点

首先,您的用户需要启用委托,如果唯一的改变是,他们很可能会这样做。否则,您可以取消选中“帐户敏感且无法委派”复选框,该复选框是AD中的用户属性

其次,必须信任您的服务帐户进行委派。由于您最近更改了服务帐户,我怀疑这就是罪魁祸首。()

您提到可能存在一些SPN问题,因此请确保为两个端点设置SPN,否则您将无法在AD中看到委派选项卡。另外,请确保您处于“Active Directory用户和计算机”的高级视图中

如果即使在更正SPN后仍然没有看到“委派”选项卡,请确保您的域未处于2000模式。如果是,您可以“提升域功能级别”

此时,您可以将帐户标记为受信任的委派:

在详细信息窗格中,右键单击要信任的用户 委派,然后单击属性

单击“委派”选项卡,选择受信任的委派帐户 复选框,然后单击“确定”

最后,您还需要将所有机器设置为受信任的委派机器


完成此操作后,重新连接到sql server并测试您喜欢的服务器。它们应该起作用

首先:我的问题与你的问题并不完全相同,但这篇文章是谷歌在撰写本文时出现的用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败的
错误的第一件事。该解决方案可能对搜索此错误的人有用,因为我在网上的任何地方都没有找到此特定解决方案

在我的例子中,我使用Xampp/Apache和PHP sqlsrv尝试使用Windows身份验证连接到MSSQL数据库,并收到您描述的用户“NT AUTHORITY\ANONYMOUS LOGON”的
登录失败
错误。我最终发现问题在于Apache服务本身在用户“本地服务”下运行,而不是我登录时使用的用户帐户。换句话说,它实际上是在使用一个匿名帐户。解决方案是进入services.msc,右键单击Apache服务,转到属性,转到登录选项卡,然后输入用户的凭据。这与您的SPN相关问题相符,因为您的SPN设置为从域上的特定用户运行。因此,如果正确的SPN未运行,windows身份验证将默认为错误的用户(可能是“本地服务”用户),并给出匿名错误

这与你的问题不同。本地网络上的计算机都不在域上,它们只在工作组上。要对工作组使用Windows身份验证,具有服务器的计算机(在我的示例中为MSSQL服务器)和具有请求数据的服务的计算机(在我的示例中为Apache)都需要具有相同名称和相同密码的用户

总之,
登录用户的NT AUTHORITY\ANONYMOUS日志失败
<add name="YourContext" connectionString="Data Source=<IPAddressOfDBServer>;Initial Catalog=<DBName>;USER ID=<youruserid>;Password=<yourpassword>;Integrated Security=False;MultipleActiveResultSets=True" providerName="System.Data.SqlClient"/>