我在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?
答案 0 :(得分:4)
确保从加入Active Directory域的计算机运行脚本,并且计算机的DNS正在正确解析为AD。要查找SERVERNAME $,计算机需要向DNS询问要查询的Active Directory域控制器的位置。 SPN脚本也是错误的。
确保您已登录内部域以运行第一个命令。第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:\>
答案 1 :(得分:3)
根据我对@ T-Heron的回答的最后评论,internal\SERVERNAME$
帐户不存在。它应该是internal.domain.com\SERVERNAME$
,与DOMAIN\SERVERNAME$
的帐户相同,其中DOMAIN
是internal.domain.com
的Windows 2000之前的名称。
因此,Kerberos Configuration Manager识别的错误放置的 SPN不是初始错误消息的根本原因:The target principal name is incorrect. Cannot generate SSPI context. (Microsoft SQL Server)
初始问题的解决方案来自this post,在客户端和服务器端都执行了几个步骤来解决问题。