2009-11-28 56 views
27

我正在尝试构建数据库脚本的.NET应用程序。在构建项目时,出现错误“无法创建SSPI上下文”。此错误显示在输出窗口中(VS2008屏幕内),并且构建过程失败。请帮助。 SQL Server被配置为在作为网络服务运行的Windows身份验证&上工作(这两件事对我的项目是必须的)。无法创建SSPI上下文

请帮忙。这个错误似乎并不一致。它通过重新启动机器,修改系统时间以匹配域时间和网络中的一些建议而得到修复。请帮助。

+2

我在我的网络适配器的IPv4属性下更改了默认DNS服务器地址后出现此错误。当我将DNS服务器更改回默认状态时,它就消失了。 –

+0

请在阅读本页之前阅读以上评论。 – vmassuchetto

回答

14

这是一个与各种原因引起相当常见的错误:与KB 811889

  • 什么SQL Server的版本从这里开始?
  • 和客户端和服务器上的Windows?
  • 本地或网络SQL实例?
  • 域或工作组?供应商?
  • 更改密码
  • 本地窗口日志错误?
  • 受影响的其他应用程序?
+0

感谢您的立即回复! 1. SQL Server 2008中 2的Windows XP 3.网络实例 4.域名 5.没有改变密码一会儿 6只记录显示此错误 7.我新台币能够从登录我应用,就是这样。我可以直接在SQL登录 – Prasanna

+3

修复应用程序池用户/密码为我做了。 – Sameer

21

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

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

+0

谢谢, 密码最近未过期。它早已发生,密码现在不是问题。 – Prasanna

+1

链接已过期,请更新。 对我而言,问题在于我的AD帐户在登录到机器和登录到SSMS之间被锁定。 – Brent

+1

Bam,这就是我的情况 - 我们在VirtualBox中有一个VM,通常处于保存状态,而不是关闭/重新启动。从命令提示符运行'ipconfig/release'和'ipconfig/renew',然后重新启动Visual Studio为我解决了这个问题。 – Robotnik

2

“无法生成SSPI上下文”错误是非常通用的,可能会出于多种原因。只是任何潜在的Kerberos/NTLM错误的封面错误。 Gbn的KB文章链接是一个非常好的起点,通常解决问题。如果您仍有问题,我建议您按照Troubleshooting Kerberos Errors中的故障排除步骤操作。

0

我可以通过重新设置域(服务器,域服务器,但不涉及SQL Server除域管理)后面的客户端机器来解决这个问题。

谢谢大家的直接支持!

3

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

+0

在连接字符串dit它。 – Berzerk

2

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

通过indu_teja提出的解决方案提出了相同的解决方案indu_teja解决它说:

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

  1. 我们将无法远程连接到SQL Server。
  2. 但是,我们将能够使用本地帐户连接到服务器。

原因:问题可能是因为Active Directory中的 SPN没有正确同步。

解决方案:

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

我只是有同样的问题,我所做的只是删除用户登录使用其他用户ID和添加回SQL Server中的凭据。

0

有一个非常奇怪的例子,所有具有包含SQL服务器的windows计算机名称的连接字符串的Web产品都正常工作,但具有附加内部域的FQDN的产品给出了SSPI错误。 即 COMPUTERNAME VS COMPUTERNAME.DOMAIN (平一直担任预期)

这只能为问题正在使用新的SQL Server时,被和hosts文件中指出两个计算机名和计算机名的FQDN的连接字符串。

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

SQL:2008R2 SQL2012

IIS:2008R2

4

你应该做的第一件事是进入日志(Management\SQL Server Logs),看看是否SQL服务器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运行时的帐户时看到了这种情况。将其重置为本地系统帐户解决了问题。微软在手动配置SPN时也有一个guide

3

如果您在IIS上托管,请确保AppPool帐户的密码没有更改

如果是,那么请按照下列步骤操作:

  • 转到IIS
  • 点击应用程序池
  • 选择应用
  • 的应用程序池用鼠标右键单击您的应用程序池
  • 高级设置
  • 标识
  • 更新密码
  • 重新启动应用程序池
+1

谢谢哥们..你节省了我的时间.. –

0

这是我的情况。我有一台托管SQL Server的远程机器。从我的本地机器上,我试图通过一些C#代码访问SQL实例,并且出现此错误。我的机器/域上的用户帐户的密码有已过期

  1. 打开远程计算机上,这促使我要更改密码
  2. 我这个提示中改变了我的密码,登录到远程机器
  3. 我“锁定”我的地方:我有以下固定它机(使用windows + L关键,所以我并没有完全签署),这样我可以得到回到登录页面
  4. 我用新密码
签了回来到我的本地机器

一切然后正常工作。

0

在我来说,这是一个缺少SPN,不得不运行这两个命令:

SETSPN -a为MSSQLSvc:SERVERNAME SERVERNAME SETSPN -a为MSSQLSvc:服务器名称:1433 SERVERNAME

在换句话说,在我的情况下,我已经有正确的FQDN,但不只是NETBIOS名称,添加这些后,它工作正常。那么最初它没有,但等待2分钟后,它没有。

3

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

0

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