我无权访问 Active Directory 设置,也没有权限更改链接服务器上的任何内容。
从我读过的所有内容来看,这似乎意味着我无法使用 Kerberos - 这是一个大问题,因为我不知道如何在没有它的情况下使用链接服务器。
有没有办法可以在没有 Kerberos 的情况下连接到链接服务器?(或者在 AD 中无需管理员即可启用 Kerberos 的某种方法?)
确切的问题描述
当我连接到链接服务器时坐在我的服务器前,它工作正常;但是当我尝试连接到链接服务器时从任何其他计算机(通过我的服务器委托),它给出错误:
用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。(Microsoft SQL Server,错误:18456)
看来这就是“双跳问题”,通常的解决方案是启用 Kerberos,这需要访问 AD 和链接服务器。
当我将安全性设置为“时,我遇到了同样的错误使用登录的当前安全上下文进行” 我不能使用“使用此安全上下文进行“因为这似乎使用 SQL 身份验证(链接服务器上未启用)而不是 NTLM
答案1
这确实是一个受约束的委派(即“双跳”)。您无法更改任何设置来使其正常工作。如果存在这样的设置,那么从定义上讲,它就是一个错误,因为它会破坏域策略,即仅将委派限制到受信任的帐户。因此,除非您进行 AD 更改以将“中间”的 SQL Server 标记为受信任的委派,否则您将无法成功进行双跳。我给您的任何其他解决方法都会让我处于帮助您违反域策略的位置。既然您似乎了解技术问题,我建议您敲正确的门:域的主人和/或您的要求的利益相关者。
答案2
您可以使用 sp_addlinkedsrvlogin 将主机 SQL Server 上的 Windows 登录名映射到远程服务器上的 SQL 登录名。此功能不适用于 Windows 组。
答案3
在链接服务器对话框中,在安全部分,您是否选择了“使用登录的当前安全上下文进行操作”?
您尝试连接的服务器上是否设置了 Windows 帐户?
答案4
要使用没有 kerberos 的链接服务器,唯一的选择是 SQL 登录。如果那不是一个选项,你应该真正尝试修复 kerberos 身份验证。
您必须弄清楚哪个帐户运行 SQL Server 服务。如果它是一个域帐户,您应该请某人为该用户注册 SPN。
如果您可以使用域用户访问域上的任何 Windows 2008 服务器,则应运行此 CMD 命令来检查已注册的内容(允许读取访问)。
setspn -l [sqlservicedomainaccount]
您应该检查 setspn -l sqlmachinename 并查看它是否已注册,以及 sqlserviceaccount。由于这些注册表不应该有重复的项目,因此您需要先删除并注册新的注册表。
然后要求网络中的某人注册此 spn(因为注册后需要重新启动服务,所以您应该只在时间窗口内进行此操作)