2015-08-31 340 views
12

我正努力从计算机A获得SQL Server连接到运行SQL Server的计算机B.目标主体名称不正确。无法生成SSPI上下文

我已经Google广泛搜索,所有我发现的东西都没有奏效。他们也不会一步一步地引导你解决这个问题。

我们没有使用Kerberos,而是配置了NTLM。

enter image description here

涉及的机器(XX是用来掩盖一些机器名的出于安全目的):

  • xxPRODSVR001 - 在Windows Server 2012域控制器
  • xxDEVSVR003 - Windows Server 2012(本机发生错误)
  • xxDEVSVR002 - Windows Server 2012中(本机运行SQL Server 2012)

以下SPN的注册到DC(xxPRODSVR001)。我模糊了与YYY域为安全起见:

注册ServicePrincipalNames为CN = xxDEVSVR002,CN =电脑,DC = YYY,DC =本地:

  MSSQLSvc/xxDEVSVR002.yyy.local:49298 

      MSSQLSvc/xxDEVSVR002.yyy.local:TFS 

      RestrictedKrbHost/xxDEVSVR002 

      RestrictedKrbHost/xxDEVSVR002.yyy.local 

      Hyper-V Replica Service/xxDEVSVR002 

      Hyper-V Replica Service/xxDEVSVR002.yyy.local 

      Microsoft Virtual System Migration Service/xxDEVSVR002 

      Microsoft Virtual System Migration Service/xxDEVSVR002.yyy.local 

      Microsoft Virtual Console Service/xxDEVSVR002 

      Microsoft Virtual Console Service/xxDEVSVR002.yyy.local 

      SMTPSVC/xxDEVSVR002 

      SMTPSVC/xxDEVSVR002.yyy.local 

      WSMAN/xxDEVSVR002 

      WSMAN/xxDEVSVR002.yyy.local 

      Dfsr-12F9A27C-BF97-4787-9364-D31B6C55EB04/xxDEVSVR002.yyy.local 

      TERMSRV/xxDEVSVR002 

      TERMSRV/xxDEVSVR002.yyy.local 

      HOST/xxDEVSVR002 

      HOST/xxDEVSVR002.yyy.local 

为CN = xxDEVSVR003注册ServicePrincipalNames, CN =电脑,DC = YYY,DC =本地:

  MSSQLSvc/xxDEVSVR003.yyy.local:1433 

      MSSQLSvc/xxDEVSVR003.yyy.local 

      Hyper-V Replica Service/xxDEVSVR003 

      Hyper-V Replica Service/xxDEVSVR003.yyy.local 

      Microsoft Virtual System Migration Service/xxDEVSVR003 

      Microsoft Virtual System Migration Service/xxDEVSVR003.yyy.local 

      Microsoft Virtual Console Service/xxDEVSVR003 

      Microsoft Virtual Console Service/xxDEVSVR003.yyy.local 

      WSMAN/xxDEVSVR003 

      WSMAN/xxDEVSVR003.yyy.local 

      TERMSRV/xxDEVSVR003 

      TERMSRV/xxDEVSVR003.yyy.local 

      RestrictedKrbHost/xxDEVSVR003 

      HOST/xxDEVSVR003 

      RestrictedKrbHost/xxDEVSVR003.yyy.local 

      HOST/xxDEVSVR003.yyy.local 

现在,如果只有SQL Server错误消息是更具描述性的,并告诉我什么主体名称有人尝试连接到我可能能够诊断这一点。

那么,任何人都可以通过如何解决这个问题,或者你能看到我提供的是错误的东西吗?

我很乐意生成更多的调试信息,只是告诉我你需要什么。

+0

我们不运行内部DNS服务器。但是为了消除这个问题,你说我应该“ping -a x.x.x.x”或者有另一种方法来确定是否有重复项? – TheEdge

+0

我不是专家,但我认为SPN和SSPI是一个Kerberos的东西?你确定你没有使用Kerberos吗? –

+0

@DylanSmith不是我可以看到.....当我在SQL Server中运行SP(现在忘记名字)时,它全部成为NTLM。你知道我如何检查? – TheEdge

回答

1

SSPI上下文错误肯定表示正在尝试使用kerberos进行身份验证。

检查安全事件日志,如果您使用kerberos,您应该看到使用身份验证软件包进行登录尝试:Kerberos。

NTLM身份验证可能失败,因此正在进行Kerberos身份验证尝试。您可能还会在安全事件日志中看到NTLM登录尝试失败?

您可以打开dev中的kerberos事件日志记录来尝试调试kerberos失败的原因,虽然它非常冗长。

1

因为我在寻找解决方案时遇到自己的问题,所以我会在这里分享我的解决方案,以防其他人也来到这里。

我连接到SQL Server的罚款,直到我的机器被移动到另一个办公室另一个域。然后,在切换之后,我得到了关于目标主体名称的这个错误。使用完全限定名称连接的固定内容如:server.domain.com。实际上,一旦我以这种方式连接到第一台服务器,我就可以使用服务器名称连接到其他服务器(没有完整的资格证书),但是您的里程可能会有所不同。

+0

当我向SQL连接添加证书时,此问题只发生在我身上。该证书已颁发给FQDN,因此,当我连接到FQDN \ Instance时,它就起作用了。 –

2

我只是碰到了这一点,并通过做两件事固定它:

  1. 授予读/写的servicePrincipalName权限使用ADSI编辑服务帐户,如https://support.microsoft.com/en-us/kb/811889
  2. 描述拆卸的SPN以前存在使用

    setspn -D MSSQLSvc/HOSTNAME.domain.name.com:1234 HOSTNAME 
    

    磨片在SQL Server 计算机帐户(相对于服务帐户) re 是实例使用的端口号(我的不是默认实例)。

1

我今天遇到了这个问题,想分享我的问题,因为这个问题很容易被忽略,而且很容易解决。

我们管理我们自己的rDNS,并最近重新编辑我们的服务器命名方案。作为其中的一部分,我们应该更新我们的rDNS并忘记这么做。

一个ping打开了正确的主机名,但是一个ping -a返回了错误的主机名。简单修复:更改rDNS,做一个ipconfig/flushdns,等待30秒(只是我做的事情),做另一个ping -a,看到它解决正确的主机名,连接...利润。

3

登录到这两个SQL箱和你的客户和类型:

ipconfig /flushdns 
nbtstat -R 

如果不工作,更新您的客户端机器上的DHCP ......这项工作2电脑在我们的办公室。

+0

在我的客户端机器和SQL框上加上'ipconfig/release'和'ipconfig/renew'在我的客户端机器上做了你的回答,并且它不适用于我;( – AlbatrossCafe

0

我就遇到了这个问题的一种变体,这里是特点:

  • 用户能够成功连接命名实例,例如,Server\Instance连接成功
  • 用户是无法连接到默认实例,例如,到Server的连接失败,OP的屏幕截图与SSPI有关
  • 用户无法将默认实例与完全合格的名称,例如,Server.domain.com连接失败(超时)
  • 用户无法IP地址,而命名实例连接,例如,192.168.1.134连接失败
  • 其他用户不能在域(例如,用户谁VPN的网络),但使用域凭据能够成功连接到默认实例和IP地址

所以试图找出为什么这个单一用户无法连接很多头痛的问题后,这里的步骤我们采取修复的情况:

  1. 查看SPN列表中的服务器使用
    setspn -l Server
    a。在我们的示例中,它表示Server.domain.com
  2. 向位于C:\Windows\System32\drivers\etc\hosts的hosts文件添加一个条目(以管理员身份运行记事本以更改此文件)。我们添加的条目是
    Server.domain.com Server

在此之后,我们能够成功地通过SSMS连接到默认实例。

0

我遇到了一个新的:SQL 2012托管在Server 2012. 被授权为SQL AlwaysOn创建一个集群。
集群创建人人都得到了SSPI消息。

要解决这个问题跑以下命令:

setspn -D MSSQLSvc/SERVER_FQNName:1433 DomainNamerunningSQLService

DomainNamerunningSQLService ==我为SQL 设置的域帐户,我需要一个域管理员运行命令。集群中只有一台服务器存在问题。

然后重新启动SQL。令我惊讶的是我能够连接。

0

我正尝试从Visual Studio 2015控制台应用程序的笔记本电脑连接到运行SQL Server 2015的VM。我前一天晚上运行我的应用程序,并没有问题。在早上,我尝试调试应用程序,我得到这个错误。我试过ipconfig/flushrelease + renew和一堆其他垃圾,但最后...

重新启动您的虚拟机并重新启动客户端。这为我修好了。我应该知道,每次重新开始工作。

4

我有一个ASP.NET MVC应用程序正在处理这个问题。

我意识到我最近改变了我的密码,我可以通过登录并再次注销,以解决它。

+0

这是我的问题,密码改变了。应用程序池。 –

7

我花了大约几个小时,同样的问题。 原来,那"Integrated Security=true"引起了这个问题。

尝试从连接字符串中删除此参数。

0

我在我的sql服务器上有这个问题。我setspn -D mssqlsvc \主机名。域名主机名然后停止并启动我的SQL服务器服务。

我在想停止并开始我的sql服务就可以了。

0

,同时使用Windows身份验证登录,来解决这个问题我已经重新启动我的服务器一次,然后尝试登录我也曾经有过的SQL Server 2014这一问题,它为我工作。

1

Integrated Security=false

将此标志webconfig连接字符串为假。它会工作!

2

我在访问Web应用程序时遇到了这个问题。这可能是由于我最近更改了Windows密码。当我已经更新了在那里我有托管Web应用程序的应用程序池的密码

这个问题得到了解决。

0

请您在SQL Server Management Studio中的提到的登录名的权限,使其成为系统管理员复选框打勾,然后作出Integrated Security=False在config文件。客户端机器

  1. IPCONFIG/FLUSHDNS

  2. klist的吹扫上

    火警2的命令。

在客户端计算机上安装kerbarose配置管理器。

最后,重新启动客户机和主要SQL服务器服务。在客户机上运行应用程序。这工作正确100%。

+0

感谢您的回答 - .config文件在哪里? –

0

我有同样的问题,但锁定和解锁机器为我工作。有时,防火墙问题会给出错误。

我不确定它是否适合你,只是分享我的经验。

2

我在使用Windows身份验证通过SQL Server Management Studio连接时收到此错误。我的密码已过期,但我还没有更改。一旦更改,我必须注销并重新登录,以便机器正在使用我的新凭据。

0

尝试通过Windows身份验证时出现同样的错误。听起来很可笑,但以防万一它帮助别人:这是因为我的域帐户在我登录(!)时被锁定了。解锁该帐户解决了它。

0

只是另一个潜在的解决方案添加到这个最模糊的错误The target principal name is incorrect. Cannot generate SSPI context. (.Net SqlClient Data Provider)的:

验证查验SQL Server时所解析的IP是一样的一个在Configuration Manager。要检查,请打开SQL Server配置管理器,然后转到SQL Server网络配置> MSSQLServer协议> TCP/IP。

确保TCP/IP已启用,并且在IP地址选项卡中,确保服务器在ping时使用的IP解析为同一个IP。这为我解决了这个错误。

相关问题