【问题标题】:Cannot create SSPI context无法创建 SSPI 上下文
【发布时间】:2009-11-28 13:41:19
【问题描述】:

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

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

【问题讨论】:

  • 我在网络适配器的 IPv4 属性下更改了默认 DNS 服务器地址后收到此错误。当我将我的 DNS 服务器改回默认值时,它就消失了。
  • 请在下此页之前阅读上面的评论。

标签: sql sql-server security sspi


【解决方案1】:

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

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

【讨论】:

  • 谢谢,密码最近没有过期。它发生在很久以前,现在密码不是问题。
  • 链接已过期,请更新。我的问题是我的 AD 帐户在登录机器和登录 SSMS 之间被锁定。
  • Bam,这就是我的情况 - 我们在 VirtualBox 中有一个 VM,它通常处于保存状态而不是关闭/重新启动。从命令提示符运行 ipconfig /releaseipconfig /renew,然后重新启动 Visual Studio 为我解决了这个问题。
  • 对我们的一位用户来说就像炸弹一样工作。问题是除了这个用户之外,每个人都能够连接。非常感谢。
  • @Robotnik ipconfig /release 在我的远程桌面连接上并不是一个好主意^.^
【解决方案2】:

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

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

【讨论】:

  • 感谢您的即时回复! 1. SQL Server 2008 2. Windows Xp 3. 网络实例 4. 域 5. 暂时没有更改密码 6. 日志只显示此错误 7. 我无法从我的应用程序登录,就是这样。我可以直接用SQL登录
  • 修复应用程序池用户/密码为我完成了。
  • 在现代和传统 Windows 系统的混合环境中遇到了这个问题。部分问题可能是用户帐户下的系统之间共享的令牌。 Win 更改注册表。检查 System\CurrentControlSet\Control\Lsa\Kerberos\Parameters 值:MaxTokenSize,数据类型:REG_DWORD 十进制值:48000 请参阅 MS KB:837361 kerberos-protocol-registry-entries-and-kdc-configuration-keys 327825 当用户属于多个组时,Kerberos 身份验证出现问题
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

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

    在我的情况下,它工作得很好。

    【讨论】:

      【解决方案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 也有一个 guide 手动配置 SPN。

      【讨论】:

      • “指南”的链接似乎已从 Microsoft 中删除。你是说这个guide 吗?
      【解决方案6】:

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

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

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

      【讨论】:

        【解决方案7】:

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

        【讨论】:

        • . 在连接字符串中修改它。
        【解决方案8】:

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

        【讨论】:

          【解决方案9】:

          我也发出了这个问题,服务器管理员按照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,然后再用你的域账号重置,回收sql server。

          【讨论】:

            【解决方案10】:

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

            【讨论】:

              【解决方案11】:

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

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

              然后一切正常。

              【讨论】:

                【解决方案12】:

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

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

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

                【讨论】:

                  【解决方案13】:

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

                  【讨论】:

                    【解决方案14】:

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

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

                    【讨论】:

                      【解决方案15】:

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

                      【讨论】:

                        【解决方案16】:

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

                        感谢大家的即时支持!

                        【讨论】:

                          【解决方案17】:

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

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

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

                          SQL : 2008R2 SQL2012

                          IIS : 2008R2

                          【讨论】:

                            【解决方案18】:

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

                            【讨论】:

                            • 嗨,欢迎来到 SO!您的回答没有解决原始发帖人的问题,近十年后更是如此。事实仍然是它可能是一个有用的建议,在这种情况下,像这个这样的 cmets 更适合这个目的。
                            【解决方案19】:

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

                            【讨论】:

                              【解决方案20】:

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

                              在管理员模式下运行 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。

                              【讨论】:

                                猜你喜欢
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 2013-08-10
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 2015-11-25
                                相关资源
                                最近更新 更多