我正在研究.NET应用程序,我正在尝试构建数据库脚本。在构建项目时,我收到错误“无法创建SSPI上下文。”。此错误显示在输出窗口(VS2008屏幕内)中,构建过程失败。请帮忙。 SQL Server配置为使用Windows身份验证&作为网络服务运行(这两件事对我的项目来说都是必须的。)
请帮助解决这个问题。这个错误似乎不一致。过去通过重新启动机器,更改系统时间以匹配域时间和网络中的一些建议来修复它。请帮忙。
答案 0 :(得分:22)
听起来你的PC已经有一段时间没有联系过身份验证的域控制器了。 (我曾经多次在我的笔记本电脑上发生这种情况。)
如果密码过期,也会发生这种情况。
答案 1 :(得分:16)
这是一个很常见的错误,有多种原因:从这里开始KB 811889
答案 2 :(得分:5)
在更改运行MSSQLSERVER-Service
的用户后,我遇到了同样的问题要使用SQL Server解决不正确的SPN,我使用了此工具
http://www.microsoft.com/en-us/download/details.aspx?id=39046 - 适用于SQL Server的Microsoft®KerberosConfiguration Manager
就我而言,它运作良好。
答案 3 :(得分:5)
当Windows用户帐户过期并且他已使用旧密码登录时,通常会出现此错误。 只需要求用户重新启动他的机器并检查密码是否已过期或他是否更改了密码。 希望这有助于!!!!!
答案 4 :(得分:4)
您应该做的第一件事是进入日志(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。
答案 5 :(得分:3)
我使用SQL Server配置管理器解决了Cannot Generate SSPI Context
错误。由于我的计算机上有SQL Server本机客户端10.0,因此与服务器的连接正在尝试使用命名管道(或共享内存?)。其他机器可以运行我的应用程序没有问题。当我查看配置管理器时,命名管道和共享内存都被启用(好)。但是,在别名下,计算机的名称是强制TCP的。由于我不知道改变这会产生什么影响,我更改了程序中的连接字符串以使用< servername>。< domainname>代替。固定的。
答案 6 :(得分:3)
如果您在IIS上托管,确保AppPool帐户的密码未更改。
如果有,请按照以下步骤操作:
答案 7 :(得分:2)
我也发布了这个问题,服务器管理员通过遵循与http://www.sqlservercentral.com/Forums/Topic546566-146-1.aspx
中提出的indu_teja相同的解决方案解决了这个问题indu_teja提出的解决方案说:
如果您收到此“SSPI上下文错误”。我们面临的问题是:
- 我们无法远程连接到SQL Server。
- 但是我们可以使用本地帐户连接到服务器。
醇>原因:问题可能是因为没有适当的同步发生 Active Directory中的SPN。
解决方案:
- 您需要重置SPN。使用synytax“SET SPN”。您可以在net中检查一次语法。
- 将您的sql server服务帐户从域帐户更改为本地帐户,回收sql,然后使用您的域帐户重新重置并回收sql server。
醇>
答案 8 :(得分:2)
“无法生成SSPI上下文”错误非常通用,可能由于多种原因而发生。只是任何基础Kerberos / NTLM错误的覆盖错误。 Gbn的KB文章链接是一个非常好的起点,通常可以解决这些问题。如果您仍有问题,建议您按照Troubleshooting Kerberos Errors中的问题排查步骤进行操作。
答案 9 :(得分:1)
我遇到了同样的问题,我所做的就是使用其他用户ID删除sql server中的用户登录凭据并将其添加回来。
答案 10 :(得分:1)
这是我的情况。我有一台托管SQL Server的远程计算机。从我的本地机器,我试图通过一些C#代码访问SQL实例,我收到此错误。我的计算机/域上的用户帐户的密码已过期。我用以下内容修复了它:
windows
+ L
密钥,因此我无需完全签名)以便我可以返回登录页面一切都很好。
答案 11 :(得分:1)
在我的情况下,它是一个缺少的SPN,必须运行这两个命令:
setspn -a MSSQLSvc:SERVERNAME SERVERNAME setspn -a MSSQLSvc:SERVERNAME:1433 SERVERNAME
换句话说,在我的情况下,我已经正确地使用了FQDN但不仅仅是NETBIOS名称,在添加它们之后它工作正常。最初它没有,但在等了2分钟之后就完成了。
答案 12 :(得分:1)
也许您在连接字符串中使用了Integrated Security = SSPI。 SSPI用于使用Windows身份验证的受信任的连接。因此,为了在Windows身份验证中正常工作,您的系统和数据库服务器应该在同一域中并且使用相同的DNS服务器地址,或者应该在受信任的域中。
如果系统和数据库服务器位于同一域中,请检查系统网络连接中IPV4属性的DNS服务器地址,并提供数据库服务器正在使用的同一DNS服务器。
答案 13 :(得分:1)
在vb.net中,如果使用链接服务器,则请检查连接字符串。集成安全性= true;并非在所有SQL提供程序中都适用,它与OleDb提供程序一起使用时会引发异常。因此,基本上集成安全性= SSPI;首选,因为它可以与SQLClient和OleDB提供一起使用。如果仍然出现错误,请完全删除语法。
答案 14 :(得分:0)
有一个非常奇怪的例子;所有包含SQL服务器的Windows计算机名称的连接字符串的Web产品都运行良好,但具有附加内部域的FQDN的产品给出了SSPI错误。 即 COMPUTERNAME VS COMPUTERNAME.DOMAIN (ping总是按预期工作)
当使用新的SQL服务器且主机文件将计算机名称和计算机名称都指向连接字符串的FQDN时,这只会产生问题。
在这种情况下,解决方案是仅将所有连接字符串设置为计算机名称,删除域引用。
SQL:2008R2 SQL2012
IIS:2008R2
答案 15 :(得分:0)
我可以通过重置域(服务器计算机,即域服务器,但与域管理除外的SQL Server无关)以及客户端计算机来解决此问题。
感谢大家的直接支持!
答案 16 :(得分:0)
我们在将服务用户从Domain1 \ ServiceUser更改为Domain2 \ ServiceUser的实例上遇到了此问题。 SPN仍在Domain1 \ ServiceUser下注册,而从未在Domain2 \ ServiceUser下注册。我们在Domain2 \ ServiceUser下注册了SPN,但问题仍然存在。然后,我们删除了Domain1 \ ServiceUser下的SPN,此问题已解决。
答案 17 :(得分:0)
如果您正在运行的代码不是在您的计算机中编写的,而是在您的工作对等方使用的计算机中运行的,而不是在您的计算机中运行,请检查web.config。 也许您的同事的名字为userPrincipalName,应该在空白处。当我们在VS中创建对项目的服务引用时,这种情况会自动发生。