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 脚本也是错误的。
去掉引号,在这种情况下不需要引号,尤其是考虑到没有要包含的嵌入空格。
确保您登录到内部域以便运行第一个命令。登录到 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$
是同一个帐户,其中 DOMAIN
是 internal.domain.com
在 Windows 2000 之前的名称。
因此,Kerberos 配置管理器识别的 错误放置 SPN 不是初始错误消息的根本原因:The target principal name is incorrect. Cannot generate SSPI context. (Microsoft SQL Server)
初始问题的解决方案来自 this post,其中在客户端和服务器端执行了几个步骤来解决问题。
我在 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 脚本也是错误的。
去掉引号,在这种情况下不需要引号,尤其是考虑到没有要包含的嵌入空格。
确保您登录到内部域以便运行第一个命令。登录到 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$
是同一个帐户,其中 DOMAIN
是 internal.domain.com
在 Windows 2000 之前的名称。
因此,Kerberos 配置管理器识别的 错误放置 SPN 不是初始错误消息的根本原因:The target principal name is incorrect. Cannot generate SSPI context. (Microsoft SQL Server)
初始问题的解决方案来自 this post,其中在客户端和服务器端执行了几个步骤来解决问题。