Azure 混合连接不适用于 SQL 服务器命名实例
Azure hybrid connection not working with SQL Server Named Instance
我已尝试为我的本地SQL服务器运行创建混合连接Windows Server 2012 带有 命名实例。我确实提供了我的服务器地址作为端点以及 1433 端口。我还根据文档将 SQL 服务器配置为静态端口,并且 允许到这些端口的出站连接 (9350 – 9354、5671、80、443)。但是,当我尝试从我的 Azure Web 应用程序访问数据库时,我得到“已成功与服务器建立连接,但在登录前握手期间发生错误。” (评论中提到的完整堆栈跟踪)。
但是,当我尝试使用默认实例创建到另一个本地SQL服务器的混合连接时,使用与上面相同的设置,它工作正常.
到目前为止,找不到对此行为足够有力的解释。
经过相当多的研究和实验,我终于找到了问题的解决方案。实际上需要为您的客户端和服务器启用 TLS 1.0(来自 windows 注册表)。
以下是让您的命名实例运行的正确注册表值:
- [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS
1.0]
- [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS
1.0\Client] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001
- [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS
1.0\Server] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001
另请注意,混合连接通过端口进行通信,因此请注意,如果您有多个 SQL 服务器实例,请确保每个实例都在不同的静态 TCP 端口上侦听。
对于遇到此问题但不想弄乱 Windows 注册表项的任何其他人,这是基于@evilSnobu 评论的另一个答案。
我正在使用 SQL Server 2017 和一个命名的数据库实例。我必须进入 SQL 服务器配置管理器,转到 "SQL Server Network Configuration" > "Protocols for [instance of db]" > 右键单击 TCP/IP > 属性。转到 "IP Addresses" 选项卡的底部,删除 "TCP Dynamic Ports" 值并在 "TCP Port" 中填写 1433。
最后,重新启动 SQL 服务器实例。另外值得一提的是,如果您使用的是连接字符串,请确保指定了实例名称。
我已尝试为我的本地SQL服务器运行创建混合连接Windows Server 2012 带有 命名实例。我确实提供了我的服务器地址作为端点以及 1433 端口。我还根据文档将 SQL 服务器配置为静态端口,并且 允许到这些端口的出站连接 (9350 – 9354、5671、80、443)。但是,当我尝试从我的 Azure Web 应用程序访问数据库时,我得到“已成功与服务器建立连接,但在登录前握手期间发生错误。” (评论中提到的完整堆栈跟踪)。
但是,当我尝试使用默认实例创建到另一个本地SQL服务器的混合连接时,使用与上面相同的设置,它工作正常.
到目前为止,找不到对此行为足够有力的解释。
经过相当多的研究和实验,我终于找到了问题的解决方案。实际上需要为您的客户端和服务器启用 TLS 1.0(来自 windows 注册表)。
以下是让您的命名实例运行的正确注册表值:
- [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0]
- [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001
- [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001
另请注意,混合连接通过端口进行通信,因此请注意,如果您有多个 SQL 服务器实例,请确保每个实例都在不同的静态 TCP 端口上侦听。
对于遇到此问题但不想弄乱 Windows 注册表项的任何其他人,这是基于@evilSnobu 评论的另一个答案。
我正在使用 SQL Server 2017 和一个命名的数据库实例。我必须进入 SQL 服务器配置管理器,转到 "SQL Server Network Configuration" > "Protocols for [instance of db]" > 右键单击 TCP/IP > 属性。转到 "IP Addresses" 选项卡的底部,删除 "TCP Dynamic Ports" 值并在 "TCP Port" 中填写 1433。
最后,重新启动 SQL 服务器实例。另外值得一提的是,如果您使用的是连接字符串,请确保指定了实例名称。