将应用程序连接到 Azure SQL 托管实例

适用于:Azure SQL 托管实例

本文介绍了如何在 Azure 虚拟网络内部或之间的许多不同应用程序方案中,将应用程序连接到 Azure SQL 托管实例。

在确定如何以及在何处托管应用程序时,目前有多个选项可供选择。 可选择使用 Azure 应用服务或某些 Azure 虚拟网络集成选项(例如 Azure 应用服务环境、Azure 虚拟机和虚拟机规模集)将应用程序托管在云中。 还可以采用混合云方法,将应用程序保留在本地。 不论你的选择如何,你的应用程序都可以在 Azure 虚拟网络内部或之间的许多不同应用程序方案中,将应用程序连接到 Azure SQL 托管实例。

还可以从虚拟网络外部启用对托管实例的数据访问,例如,从 Power BI 和 Azure 应用服务等多租户 Azure 服务,或者从未通过 VPN 连接到虚拟网络的本地网络访问托管实例。 若要完成这些和类似的方案,请参阅在 Azure SQL 托管实例中配置公共终结点

High availability

在同一 VNet 内连接

最简单的方案是将应用程序连接到 Azure SQL 托管实例所在的虚拟网络中。 虚拟网络中的虚拟机即使位于不同子网,也能直接相互连接。 这表示只需配置指向 VNet 本地终结点的连接字符串,就能连接应用服务环境内的应用程序或者与 SQL 托管实例部署在同一虚拟网络中的虚拟机。

从不同的 VNet 中连接

如果应用程序驻留在与 SQL 托管实例不同的虚拟网络中,则连接该应用程序需要首先获得对部署 SQL 托管实例的虚拟网络的访问权限,或者对 SQL 托管实例自身的访问权限。 两个虚拟网络不需要位于同一订阅中。

可通过三个选项连接到不同虚拟网络中的 SQL 托管实例:

在这三个选项中,专用终结点是最安全、最节省资源的选项,因为它们:

  • 仅从其虚拟网络公开 SQL 托管实例。
  • 仅允许单向连接。
  • 只需在应用程序的虚拟网络中提供一个 IP 地址。

如果专用终结点无法完全满足方案的要求,请考虑改为虚拟网络对等互连。 对等互连使用主干 Azure 网络,因此跨虚拟网络边界的通信不会受到明显的延迟损失。 支持在跨所有区域的网络(全局虚拟网络对等互连)之间进行虚拟网络对等互连,而在 2020 年 9 月 22 日之前创建的子网中托管的实例仅支持其区域内的对等互连。

从本地连接

可以将本地应用程序连接到 SQL 托管实例的 VNet 本地终结点。 若要从本地访问它,需在应用程序与 SQL 托管实例虚拟网络之间建立站点到站点连接。 如果对托管实例进行仅限数据的访问便已足够,可以通过公共终结点从虚拟网络外部连接到托管实例 - 有关详细信息,请参阅在 Azure SQL 托管实例中配置公共终结点

可使用两个选项将本地应用程序连接到 Azure 虚拟网络:

如果已建立本地到 Azure 的连接,但无法与 SQL 托管实例建立连接,请检查防火墙中是否在 SQL 端口 1433 上打开了出站连接,并确认已打开 11000-11999 范围的端口来进行重定向。

连接开发人员工具箱

还可将开发人员工具箱连接到 SQL 托管实例。 若要通过虚拟网络从开发人员工具箱访问该实例,首先需要在开发人员工具箱与 SQL 托管实例虚拟网络之间建立连接。 为此,请使用本机 Azure 证书身份验证配置与虚拟网络的点到站点连接。 有关详细信息,请参阅配置点到站点连接,以便从本地计算机连接到 Azure SQL 托管实例

有关从虚拟网络外部访问托管实例的数据,请参阅在 Azure SQL 托管实例中配置公共终结点

连接到辐射型网络

另一种常见情况是,VPN 网关安装在不同于托管 SQL 托管实例的虚拟网络(中心网络)的虚拟网络(或许还有订阅)(分支网络)中。 通过从其他 VNet 内部进行连接中列出的选项之一配置从分支网络到 SQL 托管实例的连接:专用终结点、VNet 对等互连或 VNet 到 VNet 网关。

以下示例体系结构图显示了 VNet 对等互连:

Diagram showing Virtual network peering.

如果要对等互连中心网络和分支网络,请确保 VPN 网关能够从中心网络看到 IP 地址。 为此,请在“对等互连设置”下进行以下更改:

  1. 在托管 VPN 网关的虚拟网络(分支网络)中,转到“对等互连”,然后转到 SQL 托管实例的对等虚拟网络连接,再选择“允许网关传输”。
  2. 在托管 SQL 托管实例的虚拟网络(中心网络)中,转到“对等互连”,然后转到 VPN 网关的对等虚拟网络连接,再选择“使用远程网关”。

连接 Azure 应用服务

当应用程序与虚拟网络集成时,还可以连接由 Azure 应用服务托管的应用程序。 为此,请选择从其他 VNet 内部进行连接中列出的机制之一。 有关从虚拟网络外部对托管实例的数据访问,请参阅在 Azure SQL 托管实例中配置公共终结点

在将 Azure 应用服务连接到 SQL 托管实例时,有一种特殊情况是将 Azure 应用服务集成到已与 SQL 托管实例虚拟网络建立对等互连的网络。 对于这种情况,需要设置以下配置:

  • SQL 托管实例虚拟网络不得使用网关
  • SQL 托管实例虚拟网络必须设置 Use remote gateways 选项
  • 对等的虚拟网络必须设置 Allow gateway transit 选项

下图演示了此方案:

Diagram for integrated app peering.

注意

虚拟网络集成功能不会将应用与包含 ExpressRoute 网关的虚拟网络集成。 即使 ExpressRoute 网关是以共存模式配置的,也无法实现虚拟网络集成。 如果需要通过 ExpressRoute 连接访问资源,可使用虚拟网络中运行的应用服务环境。

要对通过虚拟网络的 Azure 应用服务访问进行故障排除,请参阅对虚拟网络和应用程序进行故障排除

解决连接问题

若要对连接问题进行故障排除,请查看以下内容:

  • 如果无法从同一虚拟网络中的 Azure 虚拟机连接到 SQL 托管实例,但可以从不同子网连接,请检查 VM 子网上是否设置了可能会阻止访问的网络安全组。 此外,请在 SQL 端口 1433 上和 11000-11999 范围的端口上打开出站连接,因为需要使用它们才能在 Azure 边界内通过重定向进行连接。

  • 对于与虚拟网络关联的路由表,请确保将“网关路由传播”设置为“禁用”。

  • 如果使用点到站点 VPN,请在 Azure 门户中检查配置,确定能否看到“入口/出口”编号。 如果编号不为零,则表示 Azure 在本地进行流量的出入路由。

    Screenshot showing ingress/egress numbers in the Azure portal.

  • 查看客户端计算机(运行 VPN 客户端的计算机)是否针对你需要访问的所有虚拟网络设置了路由条目。 路由存储在 %AppData%\Roaming\Microsoft\Network\Connections\Cm\<GUID>\routes.txt 中。

    Screenshot showing the route.txt.

    如此图所示,有两个条目用于所涉及的每个虚拟网络,还有第三个条目与门户中配置的 VPN 终结点相对应。

    检查路由的另一种方式是执行以下命令。 输出显示到各种子网的路由:

    C:\ >route print -4
    ===========================================================================
    Interface List
    14...54 ee 75 67 6b 39 ......Intel(R) Ethernet Connection (3) I218-LM
    57...........................rndatavnet
    18...94 65 9c 7d e5 ce ......Intel(R) Dual Band Wireless-AC 7265
    1...........................Software Loopback Interface 1
    Adapter===========================================================================
    
    IPv4 Route Table
    ===========================================================================
    Active Routes:
    Network Destination        Netmask          Gateway       Interface  Metric
            0.0.0.0          0.0.0.0       10.83.72.1     10.83.74.112     35
           10.0.0.0    255.255.255.0         On-link       172.26.34.2     43
           10.4.0.0    255.255.255.0         On-link       172.26.34.2     43
    ===========================================================================
    Persistent Routes:
    None
    
  • 如果使用虚拟网络对等互连,请确保已按照相关说明来设置允许网关传输并使用远程网关

  • 如果使用虚拟网络对等互连连接 Azure 应用服务托管应用程序,而且 SQL 托管实例虚拟网络具有公共 IP 地址范围,请确保你的托管应用程序设置允许出站流量路由到公共 IP 网络。 按照区域虚拟网络集成中的说明进行操作。

尽管较旧版本可能可用,但下表列出了连接到 SQL 托管实例的建议的最低版本的工具和驱动程序:

驱动程序/工具 版本
.NET framework 4.6.1(或 .NET Core)
ODBC 驱动程序 v17
PHP 驱动程序 5.2.0
JDBC 驱动程序 6.4.0
Node.js 驱动程序 2.1.1
OLEDB 驱动程序 18.0.2.0
SSMS 18.0 或更高版本
SMO 150 或更高版本

后续步骤