sql-server - 无法从 Azure VM 访问 Azure SQL Server

标签 sql-server azure azure-devops virtual-machine

遵循 Microsoft 提供的 Azure VM 群集教程 ( https://learn.microsoft.com/en-us/azure/developer/terraform/create-vm-cluster-with-infrastructure ),

我在 Azure 中创建了一个资源组。 在资源组下,我创建了VN、子网等。

现在,我在资源组中创建了两个虚拟机。它们的顶部都有一个 LoadBalancer。我已向 LB 添加 NAT 规则以连接到单个实例,同时它们共享相同的前端 IP。 enter image description here

我创建了一个新的资源Azure MSSQL服务器,在SQL服务器的防火墙规则中,将LB的公共(public)IP添加到Azure服务器 enter image description here

我现在已登录到各个虚拟机,并尝试从虚拟机访问 SQL 服务器,但无法连接到它。

我尝试正常ping <hostname> 它失败了133 packets transmitted, 0 received, 100% packet loss, time 295ms

然后我尝试从 IP 地址进行 telnet(IP 地址是从 ping 接收到的) 我得到了

Trying <ip_address>...
Connected to <ip_address>.
Escape character is '^]'.

当我尝试使用应用程序进行连接时,出现此错误

com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset ClientConnectionId:8b2f0e3b
-fda0-41af-b8dc-ce80d0760b82
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.jav
a:3806) ~[mssql-jdbc-11.2.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:2109) ~[mssql-jdbc-11.2
.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.prelogin(SQLServerConnection.java
:3517) ~[mssql-jdbc-11.2.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection
.java:3325) ~[mssql-jdbc-11.2.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:29
50) ~[mssql-jdbc-11.2.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnecti
on.java:2790) ~[mssql-jdbc-11.2.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:
1663) ~[mssql-jdbc-11.2.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1064) ~[
mssql-jdbc-11.2.0.jre8.jar:?]
        at jet.server.db.core.ConnectorManager$ConnectionPool.£(ConnectorManager.java:712) ~[
JRESServlets.jar:?]
        at jet.server.db.core.ConnectorManager$ConnectionPool.connect(ConnectorManager.java:4
32) ~[JRESServlets.jar:?]
        at jet.server.db.core.ConnectorManager$ConnectionPool.getConnection(ConnectorManager.
java:504) ~[JRESServlets.jar:?]
        at jet.server.db.core.ConnectorManager$ConnectionPool.getConnection(ConnectorManager.
java:487) ~[JRESServlets.jar:?]
        at jet.server.db.core.DatabaseImpl.open(DatabaseImpl.java:839) ~[JRESServlets.jar:?]
        at jet.server.db.core.GlobalDataService.<init>(GlobalDataService.java:103) ~[JRESServ
lets.jar:?]
        at jet.server.db.core.GlobalDataService.init(GlobalDataService.java:37) ~[JRESServlet
s.jar:?]
        at jet.server.ServerEnv.K(ServerEnv.java:2322) ~[JRESServlets.jar:?]

我该如何完成这项工作?

最佳答案

Azure SQL 只能通过 TCP 端口 1433 使用。检查防火墙是否允许端口 1433 上的传出 TCP 通信。

enter image description here

您可以使用以下命令检查连接:

Test-NetConnection -Port 1433 -ComputerName ServerName.database.windows.net

要解决该错误,请确保在服务器路径中打开防火墙,例如 Windows 防火墙、企业防火墙或 Azure NSG(允许访问的网络安全组。

在 Azure SQL Server 中,选择“网络”并启用以下选项:

enter image description here

连接到 Azure 虚拟机并重新启动 SQL Server,如下所示:

enter image description here

引用:

IP firewall rules - Azure SQL Database | Microsoft Learn

关于sql-server - 无法从 Azure VM 访问 Azure SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74196040/

相关文章:

sql - 寻求 Reporting Services 身份验证建议

sql-server - 以其他语言显示月份名称

sql-server - sql : select rows based on another table if is populated or empty

azure - 用于复制到 Azure Blob 的 Azure SAS 授权参数是什么?

Azure SignalR AccessToken 非常大

.net-core - DevOps 托管管道无法构建 .NET Core 2.2

c# - 引用数据表 C# 更新 SQL 表的最佳方法

azure - 在Azure云机器上添加入站和出站策略后,TCP端口80未显示在监听列表中

Azure 应用服务无法访问注册表中的图像

azure-devops - 如何将私有(private) nuget 提要的凭据添加到 Azure DevOps Pipelines 中?