编辑: 客户端机器和服务器机器以及用户帐户都在同一个域中。这种情况发生在Windows防火墙关闭的情况下。 领先的理论是:服务器大约在一周前重新启动,并未注册服务主体名称(SPN)。未注册SPN可能会导致集成身份验证退回到NTLM而不是Kerberos。
<add name="YourContext" connectionString="Data Source=<IPAddressOfDBServer>;Initial Catalog=<DBName>;USER ID=<youruserid>;Password=<yourpassword>;Integrated Security=False;MultipleActiveResultSets=True" providerName="System.Data.SqlClient"/>
我的一个SQL作业也遇到了同样的问题。它涉及从一个服务器上传数据到另一个服务器。错误发生的原因是我使用了SQL Server代理服务帐户。我创建了一个凭据,使用了一个对所有服务器都通用的用户ID(使用Windows身份验证)。然后使用此凭据创建了一个代理。在SQL Server作业中使用代理,现在正常运行。
顺便提一句,在我们的情况中,一个运行在IIS上的(PHP)网站在尝试连接数据库时显示了这个消息。
解决方法是编辑该网站上的匿名身份验证方式,使用应用程序池标识(同时我们设置了应用程序池入口,使用专门针对该网站设计的服务账户)。
注:FWIW意为"For What It's Worth",意为"值得一提"。
类似的案例已经解决:
我们的情况是,我们想要使用cnames设置链接服务器,并使用当前安全上下文的登录。
为了一切顺利,我们检查了运行SQL Server的服务帐户是否有其适当的spns设置,并且AD对象是否受信任进行委派。但是,尽管我们能够直接连接到cname,但仍然存在在其cname上调用链接服务器的问题:用户“NT AUTHORITY\ANONYMOUS LOGON”的登录失败。
我们花费了太长时间才意识到我们使用的cnames是针对更高级别的dns设置的A记录[A],而不是在其自己的域AD级别中。最初,我们将cname定向到[A].example.com而不是(应该)到:[A].domain.ad.example.com
当然,我们会遇到关于匿名登录的这些错误。
只需前往应用程序池,选择高级设置中的进程模型,然后选择身份验证,在身份验证中设置您的帐户详细信息,例如系统的用户名和密码。
明白了!通过修改 SQL Server 安全会话中用户属性解决了问题。在 SQL Server Management 中,进入安全性 -> 登录 -> 选择用于数据库连接的用户并进入其属性。转到“保护程序”选项卡,查找“连接 SQL”的行,标记“授予”选项并尝试。对我有效!
此致敬礼