The*_*dge 56 sql-server tfs spn kerberos sspi
我正在努力获得从机器A到运行SQL Server的机器B的SQL Server连接.
我已经广泛搜索了所有我发现的东西都没有用.他们也没有引导你逐步解决这个问题.
我们不使用Kerberos,而是使用配置的NTLM.
涉及的机器是(xx用于隐藏某些机器名称以用于安全目的):
以下SPN已在DC(xxPRODSVR001)上注册.出于安全考虑,我用yyy模糊了域名:
已注册的ServicePrincipalNames为CN = xxDEVSVR002,CN = Computers,DC = yyy,DC = local:
Run Code Online (Sandbox Code Playgroud)MSSQLSvc/xxDEVSVR002.yyy.local:49298 MSSQLSvc/xxDEVSVR002.yyy.local:TFS RestrictedKrbHost/xxDEVSVR002 RestrictedKrbHost/xxDEVSVR002.yyy.local Hyper-V Replica Service/xxDEVSVR002 Hyper-V Replica Service/xxDEVSVR002.yyy.local Microsoft Virtual System Migration Service/xxDEVSVR002 Microsoft Virtual System Migration Service/xxDEVSVR002.yyy.local Microsoft Virtual Console Service/xxDEVSVR002 Microsoft Virtual Console Service/xxDEVSVR002.yyy.local SMTPSVC/xxDEVSVR002 SMTPSVC/xxDEVSVR002.yyy.local WSMAN/xxDEVSVR002 WSMAN/xxDEVSVR002.yyy.local Dfsr-12F9A27C-BF97-4787-9364-D31B6C55EB04/xxDEVSVR002.yyy.local TERMSRV/xxDEVSVR002 TERMSRV/xxDEVSVR002.yyy.local HOST/xxDEVSVR002 HOST/xxDEVSVR002.yyy.local
已注册的ServicePrincipalNames为CN = xxDEVSVR003,CN = Computers,DC = yyy,DC = local:
Run Code Online (Sandbox Code Playgroud)MSSQLSvc/xxDEVSVR003.yyy.local:1433 MSSQLSvc/xxDEVSVR003.yyy.local Hyper-V Replica Service/xxDEVSVR003 Hyper-V Replica Service/xxDEVSVR003.yyy.local Microsoft Virtual System Migration Service/xxDEVSVR003 Microsoft Virtual System Migration Service/xxDEVSVR003.yyy.local Microsoft Virtual Console Service/xxDEVSVR003 Microsoft Virtual Console Service/xxDEVSVR003.yyy.local WSMAN/xxDEVSVR003 WSMAN/xxDEVSVR003.yyy.local TERMSRV/xxDEVSVR003 TERMSRV/xxDEVSVR003.yyy.local RestrictedKrbHost/xxDEVSVR003 HOST/xxDEVSVR003 RestrictedKrbHost/xxDEVSVR003.yyy.local HOST/xxDEVSVR003.yyy.local
现在,如果只有SQL Server错误消息更具描述性,并告诉我它尝试连接的主要名称,我可能能够诊断出来.
那么,任何人都可以指导我如何解决这个问题,或者你能看到我所提供的任何错误吗?
我很乐意生成更多的调试信息,告诉我你需要什么.
Ana*_*ich 22
我花了大约几个小时来解决同样的问题.原来,这"Integrated Security=true"
导致了问题.
尝试从连接字符串中删除此参数.
Sar*_*rah 15
SSPI 上下文错误明确表示正在尝试使用Kerberos 进行身份验证。
由于 Kerberos 身份验证SQL Server 的 Windows 身份验证依赖于 Active Directory,这需要您的计算机和网络域控制器之间的关系,因此您应该首先验证该关系。
您可以通过以下 Powershell 命令Test-ComputerSecureChannel快速检查这种关系。
Test-ComputerSecureChannel -Verbose
Run Code Online (Sandbox Code Playgroud)
如果它返回False,您必须修复您的计算机 Active Directory 安全通道,因为没有它,您的计算机外部就无法进行域凭据验证。
您可以通过以下Powershell命令修复您的计算机安全通道:
Test-ComputerSecureChannel -Repair -Verbose
Run Code Online (Sandbox Code Playgroud)
如果上述方法不起作用(因为您的域凭据不起作用,因为机器不受信任),您可以NETDOM RESET
从提升的cmd.exe
(不是 PowerShell)提示中使用:
NETDOM RESET %COMPUTERNAME% /UserO:domainAdminUserName /Password0:* /SecurePasswordPrompt
Run Code Online (Sandbox Code Playgroud)
(是的,命令行参数确实有一个O
( Capital-"Oh",而不是零0
)。该/Password0:* /SecurePasswordPrompt
选项将使用凭据弹出窗口,而不是让您直接在命令行中输入密码,而您绝不能这样做) .
检查安全事件日志,如果您使用的是 kerberos,您应该会看到使用身份验证包的登录尝试:Kerberos。
NTLM 身份验证可能失败,因此正在尝试进行 kerberos 身份验证。您可能还会在安全事件日志中看到 NTLM 登录尝试失败?
您可以在 dev 中打开 kerberos 事件日志记录以尝试调试 kerberos 失败的原因,尽管它非常冗长。
Microsoft 的SQL Server的Kerberos 配置管理器可以帮助您快速诊断和修复此问题。
这是一个值得一读的好故事:http : //houseofbrick.com/microsoft-made-an-easy-button-for-spn-and-double-hop-issues/
Mat*_*erd 15
使用Windows身份验证通过SQL Server Management Studio进行连接时收到此错误.我的密码已过期,但我还没有更改.一旦更改,我就必须注销并重新登录,以便机器使用我的新凭据工作.
小智 9
我使用PIN而不是密码登录Windows 10.我退出并使用我的密码重新登录,并能够通过Management Studio进入SQL Server.
只是为这个最模糊的错误添加另一个潜在的解决方案The target principal name is incorrect. Cannot generate SSPI context. (.Net SqlClient Data Provider)
:
验证ping SQL Server时解析的IP是否与Configuration Manager中的IP相同.要检查,请打开SQL Server配置管理器,然后转到SQL Server网络配置> MSSQLServer的协议> TCP/IP.
确保已启用TCP/IP,并在"IP地址"选项卡中,确保ping时服务器解析的IP与此处相同.这为我修复了这个错误.
该问题似乎是 Windows 凭据问题。我在使用 VPN 的工作笔记本电脑上遇到了同样的错误。我应该以我的域/用户名登录,这是我在直接连接时成功使用的,但是一旦我移动到具有另一个连接的 VPN,我就会收到此错误。我认为这是一个 DNS 问题,因为我可以 ping 服务器,但事实证明我需要在命令提示符下以我的用户身份显式运行 SMSS。
例如 runas /netonly /user:YourDoman\YourUsername "C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Ssms.exe"
这通常是由于服务主体名称 (SPN) 缺失、不正确或重复造成的
解决步骤:
Run Code Online (Sandbox Code Playgroud)setspn -L <ServiceAccountName> | Select-String <ServerName> | select line
确保返回的输出包含完全限定、非完全限定、带端口和不带端口的 SPN。
预期输出:
Run Code Online (Sandbox Code Playgroud)Registered ServicePrincipalNames for CN=<ServiceAccountName>,OU=CSN Service Accounts,DC=<Domain>,DC=com: MSSQLSvc/<ServerName>.<domain>.com:1433 MSSQLSvc/<ServerName>:1433 MSSQLSvc/<ServerName>.<domain>.com MSSQLSvc/<ServerName>
如果您没有看到上述所有内容,请在管理员模式下在 PowerShell 或 CMD 中运行以下命令(如果您不使用默认的 1433,请确保更改端口)
Run Code Online (Sandbox Code Playgroud)SETSPN -S MSSQLSvc/<ServerName> <Domain>\<ServiceAccountName> SETSPN -S MSSQLSvc/<ServerName>.<Domain> <Domain>\<ServiceAccountName> SETSPN -S MSSQLSvc/<ServerName>:1433 <Domain>\<ServiceAccountName> SETSPN -S MSSQLSvc/<ServerName>.<Domain>:1433 <Domain>\<ServiceAccountName>
此外,如果您收到有关找到重复 SPN 的消息,您可能需要删除它们并重新创建它们
检查客户端和服务器之间的时钟是否匹配。
当我间歇性地出现此错误时,上述答案均无效,然后我们发现某些服务器上的时间发生了漂移,一旦它们再次同步,错误就消失了。搜索 w32tm 或 NTP 以了解如何在 Windows 上自动同步时间。
我刚刚遇到了这个问题并通过做两件事来修复它:
使用删除先前存在于 SQL Server计算机帐户(而不是服务帐户)上的 SPN
setspn -D MSSQLSvc/HOSTNAME.domain.name.com:1234 HOSTNAME
Run Code Online (Sandbox Code Playgroud)
其中1234是实例使用的端口号(我的不是默认实例)。
登录到您的SQL Box和客户端,然后键入:
ipconfig /flushdns
nbtstat -R
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,请在客户端计算机上更新您的DHCP。这适用于我们办公室中的两台PC。
小智 5
我正在隔离网络中的一组 PC 上测试 IPv6,当我恢复 IPv4 时遇到了这个问题。我一直在活动目录、DNS 和 DHCP 中进行操作,所以不知道我是用什么手段来破坏 Kerberos 设置的。
我使用这个有用的提示在我的软件之外重新测试了连接,以连接我发现的远程连接。
https://blogs.msdn.microsoft.com/steverac/2010/12/13/test-remote-sql-connectivity-easily/
然后经过简短的搜索,在 Microsoft 网站上找到了这个 https://support.microsoft.com/en-gb/help/811889/how-to-troubleshoot-the-cannot-generate-sspi-context-error-message。
在 SQL 服务器上运行该工具,查看是否存在任何问题,如果状态显示错误,则点击出现的修复按钮。
这为我解决了问题。
如果有人想知道,我整理了 MS 术语:
Target = (active directory) target
Active directory target = target server running the domain controller
Domain controller = server that verifies your login information
Principal name = your windows username
SSPI = security support provider interface
Security support provider interface = software interface that manages "authenticated
communications" and allows SSPs like TLS to allow SSL, among others
SSP = security support provider (SSPI implementation)
TLS/SSL = you should already know this
Run Code Online (Sandbox Code Playgroud)
= 无法验证您的密码。
归档时间: |
|
查看次数: |
176820 次 |
最近记录: |