AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 132313
Accepted
NateJ
NateJ
Asked: 2016-03-16 11:55:06 +0800 CST2016-03-16 11:55:06 +0800 CST 2016-03-16 11:55:06 +0800 CST

SQL Server 2008R2 别名不工作

  • 772

我这里有一个有趣的情况。我们基本上是在尝试将一些 SQL Server 基础架构迁移到新硬件,其中一个盒子(单实例、2 节点集群)正在运行 2008R2。其他是 2012 年和 2014 年,但没有出现此问题。

有一个应用程序连接到名为“OLD-SQL”的服务器;假设 IP 是 11.22.33.44。这是运行默认实例 SQL 2008R2 和 Windows Server 2008R2 的旧版 SQL 框的名称。目前无法更改应用程序的连接设置/配置/字符串/任何内容。

设置为替换那个新 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 Alias(使用 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”解析为基于主机文件的新 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”,当我使用“原始”设置连接时(没有别名或主机文件重定向。),使用Kerberos身份验证。当我通过唯一别名或重定向(例如“OLD-SQL2”)连接时,它注册为 NTLM。在所有其他工作连接方法中,它也是 NTLM。Kerberos 到底在对我做什么??

sql-server sql-server-2008-r2
  • 1 1 个回答
  • 1373 Views

1 个回答

  • Voted
  1. Best Answer
    Aaron
    2016-03-31T20:14:45+08:002016-03-31T20:14:45+08:00

    总结我们在聊天中发现的内容。

    通过网络连接时,如果 Windows Server 使用服务主体名称 (SPN) 在 Active Directory (AD) 中注册,则尝试使用集成身份验证连接的客户端将从 AD 获取与服务器名称匹配的 AD 对象的 Kerberos 令牌附加到身份验证。当连接的服务器没有 SPN 或使用 SQL 身份验证连接时,将不会使用 Kerberos。

    在这种情况下,因为“OLD-SQL”仍然在 AD 中注册并且有一个 SPN 注册欺骗,本地主机文件中的 DNS 在使用集成/Windows 身份验证时将不起作用,因为没有调整返回哪个令牌/从公元使用。似乎没有办法让客户端知道将 Kerberos 令牌用于“NEW-SQL”,而原始“OLD-SQL”服务器仍在使用中,除了从 AD 中删除“OLD-SQL”SPN强制身份验证回退到 NTLM。欺骗 DNS 适用于不是在 AD 中注册的实际计算机名称或没有注册 SPN 的别名,因为 AD 不会为它们返回令牌,因此身份验证回退到使用 NTLM。

    参考

    了解 Kerberos 密钥

    注册 SPN

    • 6

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve