Nat*_*teJ 7 authentication sql-server migration sql-server-2008-r2
我这里有一个有趣的情况。我们基本上是在尝试将一些 SQL Server 基础结构迁移到新硬件,其中一个机器(单实例、2 节点集群)正在运行 2008R2。其他的是 2012 年和 2014 年,但那些没有出现这个问题。
有一个应用程序连接到名为“OLD-SQL”的服务器;假设 IP 是 11.22.33.44。这是运行默认实例 SQL 2008R2 和 Windows Server 2008R2 的旧 SQL 框的名称。目前无法更改应用程序的连接设置/配置/字符串/任何内容。
设置用来替换那个的新 SQL 框被命名为“NEW-SQL”;假设它的 IP 是 11.22.33.55。还运行 SQL 2008R2(相同的 SQL 版本)。操作系统是 Windows Server 2012 R2(较新的操作系统)。两个盒子实际上都是集群实例,每个都有 2 个节点(老式的故障转移集群,没什么特别的)。
因此,为了帮助迁移,目前,出于测试/QA 目的,我们已完成以下操作: 1. 在客户端 QA 机器上设置 Hosts 文件以将名称“OLD-SQL”重定向到 11.22.33.55(新服务器)。2.在NEW-SQL服务器上创建一个SQL Server别名(使用SQL Config Mgr.),命名为“OLD-SQL”,指向自身,端口1433,协议TCP/IP。
为了测试它,我尝试通过 SSMS 连接;我输入“OLD-SQL”作为要连接的服务器名称。它因臭名昭著的“SSPI 上下文”错误(https://support.microsoft.com/en-us/kb/811889)而失败。正在测试的应用程序也会发生同样的事情。来自 cmd-line 的 Ping 解析得很好——它知道“OLD-SQL”根据 Hosts 文件解析为新的 IP 11.22.33.55。
现在,真正把扳手扔进东西里。我回到服务器 NEW-SQL,并添加另一个别名,参数相同但命名为“OLD-SQL2”。此名称在域网络中是唯一的。我回到我的盒子,将我的主机文件更改为从该名称指向 IP (11.22.33.55),然后转到 SSMS 并尝试再次连接。 这有效!
我通过执行 a 来验证我是否在“正确的服务器”上SELECT @@SERVERNAME
,并且一看,它说“NEW-SQL”。但这当然不是我真正想要的别名;我希望能够为其提供别名“OLD-SQL”,并通过主机条目和 SQL 别名将我的应用程序重定向到“NEW-SQL”。
那么第一个别名我做错了什么?只是我不能使用与网络上现有服务器相同的名称,使用 2008R2?
SO上的类似帖子:https : //stackoverflow.com/questions/6406811/alias-not-working-on-sql-server-2008-r2 (没有解决问题)
PS:我特别说“使用 2008R2”,因为当我使用我们的 2012-2014 机器尝试相同的设置(主机、SQL 别名)时,它们以第一种方式工作得很好!(即“NEW-SQL2012”框中的别名可以是“OLD-SQL2012”,这与现有服务器相同,连接或任何问题都没有问题。)
PPS:我确实读到过这些别名更像是客户端的事情,但这就是我使用 Hosts 文件技巧的原因。当我们准备好进行“真正的”迁移时,我们将使用 DNS 和我不知道的其他技巧(这是 SysEng 的域)来将客户端(应用程序/计算机)重定向到新服务器,但他们现在说,对于测试,Hosts 文件是一个很好的替代品。
更新:除了 SQL Server 版本之外,“工作”设置和“非工作”设置之间的主要区别在于,当我使用“原始”设置连接时,旧的 2008R2 实例“SQL-OLD”(没有别名或 hosts-file-redir。),使用Kerberos身份验证。当我通过唯一别名或重定向(例如“OLD-SQL2”)进行连接时,它会注册为 NTLM。在所有其他工作连接方法中,它也是 NTLM。Kerberos到底在对我做什么??
总结我们在聊天中发现的内容。
如果 Windows Server 使用服务主体名称 (SPN) 在 Active Directory (AD) 中注册,则通过网络连接时,尝试使用集成身份验证连接的客户端将从 AD 获取与服务器名称匹配的 AD 对象的 Kerberos 令牌附加到身份验证。当正在连接的服务器没有 SPN 或正在使用 SQL 身份验证连接时,将不会使用 Kerberos。
在这种情况下,因为“OLD-SQL”仍然在 AD 中注册并且有一个 SPN 注册欺骗,当使用集成/Windows 身份验证时本地主机文件中的 DNS 将不起作用,因为没有任何调整返回哪个令牌/从 AD 使用。似乎没有办法让客户端知道将 Kerberos 令牌用于“NEW-SQL”,而原始“OLD-SQL”服务器仍在服务中,除了从 AD 中删除“OLD-SQL”SPN强制身份验证回退到 NTLM。欺骗 DNS 适用于不是在 AD 中注册的实际计算机名称或没有注册 SPN 的别名,因为 AD 不会为它们返回令牌,因此身份验证回退到使用 NTLM。
参考
归档时间: |
|
查看次数: |
1328 次 |
最近记录: |