Sql server SetSPN无法定位帐户

Sql server SetSPN无法定位帐户,sql-server,kerberos,sspi,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 server上下

我在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 server上下载了Kerberos Configuration Manager,它发现了2个错误的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?

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

  • 去掉引号,它们在这个上下文中是不需要的,特别是考虑到没有内嵌的空格可以括起来

  • 确保您已登录到内部域,以便运行第一个命令。第二个命令在登录到域时运行

    我认为建议的脚本是:

  • 应该是这样的:

    我刚刚在我的环境中测试了第二行,它成功了。我不需要混淆我的测试环境,因此它实际上是以下内容:

    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 Configuration Manager标识的错位SPN不是初始错误消息的根本原因:
    目标主体名称不正确。无法生成SSPI上下文。(Microsoft SQL Server)


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

    使用SQL登录访问是否有问题?您在本地访问时有问题吗?您可以RDP到该Windows框,打开SSMS,Windows身份验证,打开选项将网络协议从默认更改为tcp?@Wendy本地访问很好。我在服务器本身上安装了SSMS,这很有效。当我尝试在客户端windows桌面上使用SQL登录(用户名/密码)登录时,它只是说
    无法连接到SERVERNAME。用户“xxx”登录失败。
    。当我在本地使用SSM并右键单击服务器名称时,将启用属性->连接:允许远程连接到此服务器。在Sql Server配置管理器中,SERVERNAME的Sql Server网络配置->协议已启用TCP/IP。。。我还应该尝试什么?谢谢!本地访问时,SSMS不使用TCP连接SQL Server。'连接到服务器“,有选项>>按钮,将网络协议从默认更改为tcp。如果你能进去的话。检查用户“xxx”是否有访问权,如果没有添加它并授予权限,则尝试远程使用此用户id访问权。@Wendy如果我在本地启动SSM,我会在安全->登录中看到xxx,并且具有公共和系统管理员角色。当我单击远程SSMS中的Options>>按钮时,网络协议是唯一的选项(下拉菜单没有其他选项)…对不起,帮不了你多少忙。远程SQL和Windows身份验证均失败。请查a。Windows事件日志和SQL日志详细信息。BSQL Server配置,在SQL Server网络和SQL本机网络下,是否都启用了tcp/ip?c、 这是默认SQL Server实例还是命名实例?我实际上在SQL Server上本地运行Keberos Configuration Manager(这也是AD DC-不理想,但这是我的设置),因此我也在本地运行建议的脚本。逗号是一个错别字,已更正。我删除了部分域名混淆。第一级实际上是“内部”的,有问题的命令(带-d的命令)将“内部”作为域名(这是奇怪的部分)。第二个命令(-s)总是运行良好,从来没有出现过问题-但它本身并不能解决我的错误SPN问题…相应地编辑了答案。确保您已登录到内部域以运行第一个命令。结果表明
    internal.domain.com
    domain
    是同一个域,后者是后者的“Windows 2000之前”名称。因此,当我拼出完整的域名时,它的作用是删除:
    SetSPN-d“MSSQLSvc/SERVERNAME.internal.domain.com”“internal.domain.com\SERVERNAME$”
    。但是,在我运行第二个命令后,Kerberos Configuration Manager会抱怨同样的问题:“错位的SPN”。我运行了“SetSPN-L”并确认两个帐户
    internal.domain.com\SERVERNAME$
    domain\SERVERNAME$
    具有完全相同的SPN列表。所以,我想知道这个放错地方的问题是否不重要……我的IPv4设置错误,域srv ip设置不正确,您的提示修复了我的问题。
    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:\>