SetSPN无法找到帐户

时间:2017-04-21 18:45:46

标签: sql-server kerberos sspi

我在Windows Server 2012 R2上安装了SQL Server 2014,它也是AD DC。当我尝试从同一本地域上的客户端桌面使用SQL Server Management Studio(SSMS)连接到它时,我收到以下错误消息:

The target principal name is incorrect. Cannot generate SSPI context. (Microsoft SQL Server)

因此,关于同一问题的其他帖子,我在SQL服务器上下载了Kerberos Configuration Manager,找到了2个Misplaced SPN。 Kerberos Configuration Manager提出的SPN脚本命令如下:

SetSPN -d "MSSQLSvc/SERVERNAME.internal.domain.com" "internal\SERVERNAME$"
SetSPN -s "MSSQLSvc/SERVERNAME.internal.domain.com" "DOMAIN\SERVERNAME$"

但是当我尝试在服务器上的cmd中运行第一个命令时(“SetSPN -d”),我收到了这个错误:

FindDomainForAccount: Call to DsGetDcNameWithAccountW failed with return value 0x0000054B
Unable to locate account SERVERNAME$

我不确定如何从这里前进。谷歌搜索并没有找到正确的答案。请帮忙。问题是:

1)错位的SPN是罪魁祸首吗?如果是这样,如何纠正?

2)如果没有,我如何使用Windows身份验证从同一本地域的客户端桌面连接到SQL Server?

2 个答案:

答案 0 :(得分:4)

确保从加入Active Directory域的计算机运行脚本,并且计算机的DNS正在正确解析为AD。要查找SERVERNAME $,计算机需要向DNS询问要查询的Active Directory域控制器的位置。 SPN脚本也是错误的。

  1. 除去引号,在这种情况下不需要它们,特别是考虑到没有要嵌入的嵌入空格。
  2. 确保您已登录内部以运行第一个命令。第2个命令在登录 DOMAIN 时运行。

    我认为建议的脚本是:

  3. SetSPN -d "MSSQLSvc/SERVERNAME.internal.domain.com" "internal\SERVERNAME$"
    SetSPN -s "MSSQLSvc/SERVERNAME.internal.domain.com" "DOMAIN\SERVERNAME$"
    

    应该是这样的:

    SetSPN -d MSSQLSvc/SERVERNAME.internal.domain.com internal\SERVERNAME$
    SetSPN -s MSSQLSvc/SERVERNAME.internal.domain.com DOMAIN\SERVERNAME$
    

    我刚刚在我的环境中测试过第二行并且它有效。我不需要模糊我的测试环境,所以它实际上是以下内容:

    SetSPN -s MSSQLSvc/dc1.dev.local DEV\dc1$
    

    ......结果:

    Checking domain DC=dev,DC=local
    
        Registering ServicePrincipalNames for CN=DC1,OU=Domain Controllers,DC=dev,DC=local
                MSSQLSvc/dc1.dev.local
        Updated object
    
        C:\>
    

答案 1 :(得分:3)

根据我对@ T-Heron的回答的最后评论,internal\SERVERNAME$帐户存在。它应该是internal.domain.com\SERVERNAME$,与DOMAIN\SERVERNAME$的帐户相同,其中DOMAINinternal.domain.com的Windows 2000之前的名称。

因此,Kerberos Configuration Manager识别的错误放置的 SPN不是初始错误消息的根本原因:The target principal name is incorrect. Cannot generate SSPI context. (Microsoft SQL Server)

初始问题的解决方案来自this post,在客户端和服务器端都执行了几个步骤来解决问题。