SetSPN无法找到帐户

问题描述:

我在Windows Server 2012 R2(也是AD DC)上安装了SQL Server 2014。当我尝试使用SQL Server Management Studio中(SSMS)从同一本地域中的客户端桌面连接到它,我得到这个错误信息:SetSPN无法找到帐户

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

所以就同一问题下面的其他职位,我下载的Kerberos SQL服务器上的配置管理器发现2个错位的SPN。是由Kerberos配置管理器提出的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

你有使用SQL登录访问的问题吗?你有本地访问的问题,你RDP到那个Windows机器,打开SSMS,Windows认证,打开选项改变网络协议从默认到tcp? – Wendy

+0

@ Wendy本地访问没问题。我在服务器上安装了SSMS,并且工作正常。当我尝试在客户端Windows桌面上使用SQL登录(用户名/密码)进行登录时,它只是说'无法连接到SERVERNAME。用户'xxx''的登录失败。当我在本地使用SSMS并右键单击服务器名称时,Properties - > Connections:允许远程连接到此服务器已启用。在Sql Server配置管理器中,SQL Server网络配置 - > SERVERNAME的Protocals启用了TCP/IP ...我还应该尝试什么?谢谢! – Zhang18

+0

当本地访问时,SSMS不使用TCP连接SQL Server。 '连接到服务器',有选项>>按钮,将网络协议从默认改为tcp。如果你能进入。检查用户'xxx'是否有权访问,如果没有添加它并给予权限然后尝试远程使用这个用户ID访问。 – Wendy

按我最新的留言@ T鹭的回答, internal\SERVERNAME$帐户确实存在而不是。它应该是internal.domain.com\SERVERNAME$,与DOMAIN\SERVERNAME$的帐户相同,其中DOMAINinternal.domain.com的Windows 2000以前的名称。

其结果是,该错位的 SPN所确定的Kerberos配置管理器不是初始错误消息的根本原因:The target principal name is incorrect. Cannot generate SSPI context. (Microsoft SQL Server)

到初始问题的解决方案从this post,其中执行若干步骤来在客户端和服务器端解决问题。

确保您从加入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:\> 
+0

我实际上在SQL Server本地运行Keberos配置管理器(这也是AD DC--不理想,但这是我的设置),因此我也在本地运行建议的脚本。 – Zhang18

+0

逗号是一个错字,已更正。我删除了部分域名混淆。第一级实际上是“内部”,而有问题的命令(一个带有-d)具有“内部”作为域名(这是奇怪的部分)。第二个命令(-s)总是运行良好,从来没有出现过问题 - 但它本身并没有解决我*错位的SPN *问题... – Zhang18

+0

相应地编辑了答案。确保您已登录到* internal *域以运行第一条命令。 –