SetSPN 无法找到帐户

SetSPN unable to locate account

我在 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 配置管理器,发现了 2 个错误放置的 SPN。 Kerberos Configuration Manager 推荐的 SPN Script 命令如下:

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 服务器?

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

  1. 去掉引号,在这种情况下不需要引号,尤其是考虑到没有要包含的嵌入空格。

  2. 确保您登录到内部以便运行第一个命令。登录到 DOMAIN.

    时,第二个命令是 运行

    我认为建议的脚本为:

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:\>

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

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

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