Cod*_*ior 62 sql-server security sqlconnection
最近开始无法连接到数据库的应用程序一直没有问题(并且在大约6个月左右没有对其进行任何活动开发).操作管理员无法说出可能导致问题的更改内容.
客户端应用程序使用具有Integrated Security = True的硬编码连接字符串,但是当应用程序尝试创建与数据库的连接时,它会抛出一个SQLException,表示"用户登录失败'NT AUTHORITY\ANONYMOUS LOGON".
我可以通过此帐户上的Management Studio登录数据库而不会出现问题.我在这个问题上看到的所有内容都是针对ASP.NET项目的,显然它是"双跳问题",它是一个客户端应用程序,最好不要成为问题.任何帮助将不胜感激.
客户端计算机和服务器计算机以及用户帐户位于同一域中.Windows防火墙关闭时会发生这种情况.
主要理论是:服务器大约一周左右重新启动,并且未能注册服务主体名称(SPN).未注册SPN可能导致集成身份验证回退到NTLM而不是Kerberos.
Cod*_*ian 23
如果您的问题在于链接服务器,则需要查看一些内容.
首先,您的用户需要启用委派,如果唯一改变了,那么他们可能会这样做.否则,您可以取消选中"帐户敏感且无法委派"复选框是AD中的用户属性.
其次,您的服务帐户必须受信任才能进行委派.由于您刚刚更改了服务帐户,我怀疑这是罪魁祸首.(http://technet.microsoft.com/en-us/library/cc739474(v=ws.10).aspx)
您提到可能存在一些SPN问题,因此请务必为两个端点设置SPN,否则您将无法在AD中看到委派选项卡.还要确保您处于"Active Directory用户和计算机"的高级视图中.
如果仍然没有看到委派选项卡,即使在更正了SPN之后,请确保您的域不是2000模式.如果是,您可以"提高域功能级别".
此时,您现在可以将该帐户标记为委托信任:
在详细信息窗格中,右键单击要为委派信任的用户,然后单击"属性".
单击"委派"选项卡,选中"委派信任的帐户"复选框,然后单击"确定".
最后,您还需要将所有计算机设置为委托信任.
完成此操作后,重新连接到sql server并测试您喜欢的服务器.他们应该工作.
首先:我的问题与你的问题不完全相同,但这篇文章是谷歌Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'在我写这篇文章时出现错误的第一件事.该解决方案可能对搜索此错误的人有用,因为我在网上找不到这个特定的解决方案.
在我的例子中,我使用Xampp/Apache和PHP sqlsrv尝试使用Windows身份验证连接到MSSQL数据库并收到Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'您描述的错误.我终于发现问题是Apache服务本身在用户"LOCAL SERVICE"下运行而不是我登录的用户帐户.换句话说,它确实使用匿名帐户.解决方案是进入services.msc,右键单击Apache服务,转到"属性",转到"登录"选项卡,然后输入用户的凭据.这符合您与SPN相关的问题,因为您的SPN设置为从域上的特定用户运行.因此,如果正确的SPN未运行,则Windows身份验证将默认为错误的用户(可能是"LOCAL SERVICE"用户),并为您提供匿名错误.
这是与你的问题不同的地方.本地网络上的所有计算机都不在域上,它们只在工作组上.要将Windows身份验证与工作组一起使用,具有服务器的计算机(在我的情况下为MSSQL Server)和具有请求数据的服务的计算机(在我的情况下为Apache)都需要具有相同名称和相同密码的用户.
总而言之,Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'我们两种情况下的错误似乎都是由于服务没有运行和/或没有在正确的用户上引起的.确保正确的SPN或其他服务正在运行,并且在正确的用户下应该解决问题的匿名部分.
我认为用于对数据库进行身份验证的AD组必定会有一些变化.将web服务器名称(格式为domain\webservername $)添加到有权访问数据库的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帐户继承自系统上下文而不是真实用户因此,基于上下文的"ANONYMOUS LOGON"失败了.
要解决此问题,请让您的域管理员在域用户帐户下运行SQL Server时手动注册SPN.以下链接可能会对您有所帮助:
http://blogs.msdn.com/b/sql_protocols/archive/2005/10/12/479871.aspx
http://support.microsoft.com/kb/909801
| 归档时间: |
|
| 查看次数: |
198941 次 |
| 最近记录: |