我正在开发一个 .NET 应用程序,我试图在其中构建数据库脚本。在构建项目时,我收到错误“无法创建 SSPI 上下文。”。此错误显示在输出窗口(VS2008 屏幕内)中,并且构建过程失败。请帮忙解决这个问题。SQL Server 配置为进行 Windows 身份验证并作为网络服务运行(这两件事对于我的项目来说是必须的)。

请帮忙解决这个问题。这个错误似乎并不一致。过去通过重新启动计算机、更改系统时间以匹配域时间以及网上的一些建议来修复此问题。请帮忙解决这个问题。

有帮助吗?

解决方案

这是一个很常见的错误,原因有多种:从这里开始 知识库 811889

  • 什么版本的 SQL Server?
  • 那么客户端和服务器上的 Windows 呢?
  • 本地或网络 SQL 实例?
  • 域还是工作组?提供者?
  • 更改密码
  • 本地 Windows 日志错误?
  • 还有其他应用程序受到影响吗?

其他提示

听起来你的PC已经有一段时间没有联系过身份验证的域控制器了。 (我曾经多次在我的笔记本电脑上发生这种情况。)

如果密码过期,也会发生这种情况。

在更改运行MSSQLSERVER-Service

的用户后,我遇到了同样的问题

要使用SQL Server解决不正确的SPN,我使用了此工具

http://www.microsoft.com/en-我们/ download / details.aspx?id = 39046 - Microsoft <!>#174;适用于SQL Server的Kerberos Configuration Manager

就我而言,它运作良好。

当Windows用户帐户过期并且他已使用旧密码登录时,通常会出现此错误。 只需要求用户重新启动他的机器并检查密码是否已过期或他是否更改了密码。  希望这有助于!!!!!

您应该做的第一件事是进入日志(Management\SQL Server Logs)并查看SQL Server是否successfully registered the Service Principal Name (SPN)。如果您看到某种错误(The SQL Server Network Interface library could not register the Service Principal Name (SPN) for the SQL Server service),那么您就知道从哪里开始。

我们在更改SQL Server运行的帐户时发现了这种情况。将其重置为本地系统帐户解决了该问题。 Microsoft还有关于手动配置SPN的指南

我使用SQL Server配置管理器解决了我的Cannot Generate SSPI Context错误。由于我的计算机上有SQL Server本机客户端10.0,因此与服务器的连接正在尝试使用命名管道(或共享内存?)。其他机器可以运行我的应用程序没有问题。当我查看配置管理器时,命名管道和共享内存都被启用(好)。但是,在别名下,计算机的名称是强制TCP的。由于我不知道改变这会产生什么影响,我更改了程序中的连接字符串以使用<!> lt; servername <!> gt;。<!> lt; domainname <!> gt;代替。固定的。

如果您托管在 IIS 上, 确保 AppPool 帐户的密码未更改.

如果有,请按照下列步骤操作:

  • 转到 IIS
  • 单击应用程序池
  • 选择您的应用程序的AppPool
  • 右键单击您的应用程序池
  • 高级设置
  • 身份
  • 更新密码
  • 重新启动应用程序池

<!>“;无法生成SSPI上下文<!>”;错误是非常通用的,可能由于多种原因而发生。只是任何基础Kerberos / NTLM错误的覆盖错误。 Gbn的KB文章链接是一个非常好的起点,通常可以解决这些问题。如果您仍有问题,我建议您按照

我也发出了这个问题,服务器管理员通过遵循与 http://www.sqlservercentral.com/Forums/Topic546566-146-1.aspx

indu_teja提出的解决方案说:

  

如果你得到这个<!>“SSPI上下文错误<!>”;我们面临的问题是:

     
      
  1. 我们无法远程连接到SQL Server。
  2.   
  3. 但是我们可以使用本地帐户连接到服务器。
  4.         

    原因:问题可能是因为没有适当的同步发生   Active Directory中的SPN。

         

    解决方案:

         
        
    1. 您需要重置SPN。使用synytax <!>“SET SPN <!>”;。您可以在net中检查一次语法。
    2.   
    3. 将您的sql server服务帐户从域帐户更改为本地帐户,回收sql,然后使用您的域帐户重新重置并回收sql server。
    4.   

我遇到了同样的问题,我所做的就是使用其他用户ID删除sql server中的用户登录凭据并将其添加回来。

这是我的情况。我有一台托管SQL Server的远程计算机。从我的本地机器,我试图通过一些C#代码访问SQL实例,我收到此错误。我的计算机/域上的用户帐户的密码已过期。我用以下内容修复了它:

  1. 打开远程计算机,提示我输入密码
  2. 我在此提示中更改了密码并登录到远程计算机
  3. 我<!>“锁定<!>”;我的本地机器(使用windows + L键,所以我没有完全签字)这样我就可以回到登录页面了
  4. 我使用新密码
  5. 重新登录本地计算机

    一切都很好。

在我的情况下,它是一个缺少的SPN,必须运行这两个命令:

  

setspn -a MSSQLSvc:SERVERNAME SERVERNAME   setspn -a MSSQLSvc:SERVERNAME:1433 SERVERNAME

换句话说,在我的情况下,我已经正确地使用了FQDN但不仅仅是NETBIOS名称,在添加它们之后它工作正常。最初它没有,但在等了2分钟之后就完成了。

我有这个错误 - 它发生了,因为我的密码已过期,我不得不改变它。我没有注意到它,因为在某些程序中我仍然可以登录并且一切正常(包括Windows),但我无法登录到任何sql服务器。

也许您在连接字符串中使用了Integrated Security = SSPI。 SSPI用于使用Windows身份验证的可信连接。因此,要在Windows身份验证中正常工作,系统和数据库服务器应位于同一域中并使用相同的DNS服务器地址,或者应位于受信任域中。

如果您的系统和数据库服务器位于同一域中,请检查系统网络连接中IPV4属性的DNS服务器地址,并提供数据库服务器正在使用的相同DNS服务器。

在vb.net中,如果您使用链接服务器而不是检查连接字符串。综合安全=真;在所有SQL提供程序中都不起作用,它在与OleDb提供程序一起使用时会引发异常。所以基本上综合安全= SSPI;因为适用于SQLClient <!>放大器,所以是首选; OleDB提供。如果仍然遇到错误,请完全删除语法。

我可以通过重置域(服务器计算机,即域服务器,但与域管理除外的SQL Server无关)以及客户端计算机来解决此问题。

感谢大家的直接支持!

有一个非常奇怪的例子;所有包含SQL服务器的Windows计算机名称的连接字符串的Web产品都运行良好,但具有附加内部域的FQDN的产品给出了SSPI错误。 即 COMPUTERNAME VS COMPUTERNAME.DOMAIN (ping总是按预期工作)

当使用新的SQL服务器且主机文件将计算机名称和计算机名称都指向连接字符串的FQDN时,这只会产生问题。

在这种情况下,解决方案是仅将所有连接字符串设置为计算机名称,删除域引用。

SQL:2008R2 SQL2012

IIS:2008R2

我们在将服务用户从Domain1 \ ServiceUser更改为Domain2 \ ServiceUser的实例上遇到此问题。 SPN仍在Domain1 \ ServiceUser下注册,并且从未在Domain2 \ ServiceUser下注册。我们在Domain2 \ ServiceUser下注册了SPN,但问题仍然存在。然后,我们删除了Domain1 \ ServiceUser下的SPN,问题得到了解决。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top