36

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

请帮助解决这个问题。这个错误似乎并不一致。过去通过重启机器,更改系统时间以匹配域时间以及网络中的一些建议来修复它。请帮助解决这个问题。

4

20 回答 20

24

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

如果您的密码过期,也可能发生这种情况。

于 2009-11-28T13:48:24.197 回答
16

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

  • 什么版本的 SQL Server?
  • 客户端和服务器上的 Windows?
  • 本地或网络 SQL 实例?
  • 域还是工作组?提供者?
  • 更改密码
  • 本地windows日志错误?
  • 其他应用程序受到影响吗?
于 2009-11-28T13:48:58.860 回答
7

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

于 2016-09-13T10:17:27.233 回答
6

更改运行 MSSQLSERVER-Service 的用户后,我遇到了同样的问题

为了使用 SQL Server 解决不正确的 SPN,我使用了这个工具

http://www.microsoft.com/en-us/download/details.aspx?id=39046 - 适用于 SQL Server 的 Microsoft® Kerberos 配置管理器

就我而言,它运作良好。

于 2014-12-24T22:24:26.607 回答
5

您应该做的第一件事是进入日志 ( 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的指南。

于 2014-03-19T12:23:13.350 回答
5

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

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

  • 转到 IIS
  • 单击应用程序池
  • 选择您的应用程序的 AppPool
  • 右键单击您的 AppPool
  • 高级设置
  • 身份
  • 更新密码
  • 重启 AppPool
于 2015-10-16T19:09:29.997 回答
3

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

于 2012-12-07T21:29:39.263 回答
2

“无法生成 SSPI 上下文”错误非常普遍,可能由于多种原因而发生。只是任何底层 Kerberos/NTLM 错误的覆盖错误。Gbn 的知识库文章链接是一个很好的起点,通常可以解决问题。如果您仍有问题,我建议您按照故障排除 Kerberos 错误中的故障排除步骤进行操作。

于 2009-11-28T17:34:40.340 回答
2

我也发布了这个问题,服务器管理员按照与http://www.sqlservercentral.com/Forums/Topic546566-146-1.aspx中提出的 indu_teja 相同的解决方案解决了这个问题

indu_teja 提出的解决方案说:

如果您收到此“SSPI 上下文错误”。我们面临的问题是:

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

原因:该问题可能是由于 Active Directory 中的 SPN 没有正确同步发生。

解析度:

  1. 您需要重置 SPN。使用语法“SET SPN”。您可以检查一次 net 中的语法。
  2. 将你的sql server服务账号从域账号改成本地账号,回收sql,然后再用你的域账号重置,recycle sql server。
于 2013-09-19T19:05:01.557 回答
1

我只是遇到了同样的问题,我所做的只是使用另一个用户 ID 删除 sql server 中的用户登录凭据并将它们添加回来。

于 2013-10-14T11:19:32.557 回答
1

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

  1. 打开远程机器,提示我更改密码
  2. 我在此提示中更改了密码并登录到远程计算机
  3. 我“锁定”了我的本地机器(使用windows+L键,所以我不必完全注销),以便我可以返回登录页面
  4. 我使用新密码重新登录到本地计算机

然后一切正常。

于 2016-08-10T19:53:14.817 回答
1

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

于 2017-05-08T07:39:11.840 回答
1

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

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

换句话说,在我的情况下,我已经正确地拥有了 FQDN,但不仅仅是 NETBIOS 名称,在添加这些之后它工作正常。好吧,最初它没有,但在等待 2 分钟后它确实如此。

于 2016-08-31T13:21:01.700 回答
1

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

于 2019-04-04T14:49:03.260 回答
1

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

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

于 2018-06-29T13:13:14.783 回答
0

我可以通过重置域(服务器机器,它是域服务器,但除了域管理之外与 SQL Server 无关)然后是客户端机器来解决这个问题。

感谢大家的即时支持!

于 2009-11-29T09:26:17.933 回答
0

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

这只在使用新的 SQL 服务器并且主机文件将计算机名称和计算机名称都指向连接字符串的 FQDN 时才会出现问题。

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

SQL : 2008R2 SQL2012

IIS:2008R2

于 2014-01-21T11:12:38.200 回答
0

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

于 2019-07-03T14:31:35.607 回答
0

我可以通过运行以下命令来解决它。

在管理员模式下运行 CMD

klist.exe -li 0x3e7 => if you see no output or error then continue and from last command try these commands once again.
klist.exe -li 0x3e7 purge
gpupdate /force
gpresult /r /scope computer
klist purge
runas /user:[your domain here]\[your user name here] cmd.exe
klist.exe sessions | findstr /i [your hostname here in the new opened cmd window]

根据指定的条件重试这些命令,然后重新启动您的 PC。

于 2022-02-09T13:26:10.747 回答
0

如果您运行的代码不是在您的计算机中编写的,该代码在您的同事使用的计算机中运行,但不在您的计算机中,请检查 web.config。也许你同事的名字是 userPrincipalName 在某个地方应该是空白的。当我们在 VS 中创建对项目的服务引用时,这会自动发生。

于 2019-07-10T12:11:51.010 回答