标题中几乎全部都是。我预计答案是否定的,但想问一下以确定。基本上,单个 SQL Server 实例可以用多个名称引用吗?我知道您可以设置 DNS 以将多个名称解析为同一个 IP/服务器,但这会对连接到 SQL Server 产生什么影响?
答案1
SQL Server 根本不关心你连接的 DNS 名称,除非你通过 SSL 使用 SQL Server。除非你连接到特定的 TCP 端口号,否则无法使用实例的名称。
答案2
SERVER/INSTANCE 的 SERVER 部分可以是任何能够解析为正确地址的名称,可以是额外的 A 记录、CNAME 或 HOSTS 文件中的名称。
这里唯一需要注意的是,假名称可能会破坏 Kerberos 身份验证。带有 Kerberos 的 SQL 是一个有趣的东西,SQL 客户端对地址进行反向 DNS 查找,然后使用获得的名称构建 SPN,因此只要反向查找获得服务器的原始主机名,它就应该可以工作。此外,SQL 将回退到 NTLM,因此这只会在您出于某种原因需要 Kerberos 时导致问题,例如您正在使用委派。
但是,您不能让 SQL 响应多个 INSTANCE 名称。但是,您可以在 CLIENT 配置中定义别名。
当您连接到 SQL Server 时,您指定的实例名称将发送到服务器上的 SQL 浏览器服务,浏览器服务将使用所请求实例正在侦听的 TCP 端口进行响应。可以在连接字符串或别名中指定此端口号。我刚刚创建了一个名为 NEW 的别名,它指向 mysqlserver 端口 1966,该端口上有一个命名实例正在侦听。然后,我只需指定服务器名称 NEW 即可连接到命名实例。
这种方法有两个缺点。首先,每个客户端都需要进行配置,我不知道是否有任何方法可以推送该配置。第二,SQL 实例通常使用动态端口。如果您想定义别名,则需要更改服务器,以便它侦听固定端口号,然后可以将客户端配置为连接到该端口。
答案3
我发现在 SQL Server 配置管理器中创建指向同一个 SQL 服务器的别名更容易。
答案4
嗯,蒂姆,根据我的经验,你可以为服务器提供许多 DNS 条目,并且你应该不会遇到在服务器上访问默认 SQL 实例(或任何实例)的问题。
实例本身在服务器上与 SQL Browser 服务区分开来,SQL Browser 服务必须运行,这样才能看到命名的实例。如果没有,通常(100 次中有 99 次)当此服务未运行时,唯一可以看到的实例是默认实例。
我希望我能以某种方式帮助你:)