Azure SQL数据库连接架构的详细介绍

122 阅读7分钟

在这篇文章中,我们将探讨适用于Azure数据库的设置,控制与数据库的连接。

Azure门户中的连接设置

在Azure门户中,导航到Azure SQL Server和下面的防火墙和虚拟网络。

Firewalls and virtual networks

拒绝公共网络访问

默认情况下,Azure SQL数据库启用使用公共端点的连接。用户在使用VNET防火墙规则、数据库级防火墙或服务器级防火墙验证访问后,可以使用公共端点连接到SQL。

如果修改配置-拒绝公共网络访问为是,用户必须使用私有链接连接到Azure SQL。私有链接允许使用私有端点进行连接。

注意:我们在这篇文章中没有探讨私人链接。因此,你可以参考 Azure SQL数据库的Azure私有链接 来了解私有端点。

下面的流程图显示了高层的连接架构。

  • 拒绝公共网络访问 = True:Azure检查私有端点并允许服务器范围内的连接
  • 拒绝公共网络访问=False。
    • 如果在VNET防火墙规则中发现有匹配的,则提供服务器范围的访问
    • 如果没有VNET防火墙规则,则检查数据库级访问。如果IP被允许用于数据库级防火墙,则用户获得数据库范围的访问。
    • 如果没有配置VNET和数据库级防火墙访问,Azure会检查服务器级防火墙。如果配置了防火墙,用户就可以获得服务器范围的访问。否则,连接将被拒绝

Diagram showing connectivity when Deny public network access is set to yes versus when Deny public network access is set to no.

图片参考

注意:除非配置了私有端点,否则你不能拒绝公共网络访问。如果你试图禁用它,你会得到错误42102 - 无法将拒绝公共网络访问设置为是,因为没有启用私人端点来访问服务器。请设置私有端点并重试操作。

注意:你可以参考文章,通过Azure CLI、PowerShell改变公共网络访问

本节看的是具有直接网络流量的用户如何连接到Azure SQL数据库的内部组件。

为了建立与Azure SQL数据库的连接,客户端用1433端口的公共IP地址连接到网关(GW)。网关将连接重定向到具有适当连接策略的数据库集群 - 重定向或代理。数据库集群将流量转发到所需的数据库。

Diagram that shows a high-level overview of the connectivity architecture.

图片参考

Azure SQL Server支持以下连接策略。

重定向。

在重定向连接策略中,客户端直接建立与SQL数据库节点的连接。重定向策略不需要后续连接的网关,因此,它可以提供更好的吞吐量和减少延迟。 默认情况下,如果连接是在微软Azure内部产生的,Azure会使用重定向连接机制。

为了了解重定向机制,我们将在Azure虚拟机内使用Wireshark网络监控工具。从Azure虚拟机中,我们启动与Azure SQL数据库的连接,并捕获网络流量。

  • 我的Azure VM的IP地址。10.0.0.4

Azure VM

  • 运行nslookup命令来捕获Azure SQL DB的公共IP地址。它显示的IP地址是104.211.96.159

nslookup command

我的Azure SQL服务器在印度中部;因此,它使用的是微软文档中记载的以下范围内的网关IP地址--网关IP地址

Gateway IP addresses

  • 在第一步中,一旦我们从Azure VM向1433端口的Azure SQL DB发起新的连接请求,Wireshark就会捕获TCP连接请求,如下图所示。

注意:你可以从网址www.wireshark.org/,下载并安装网络协议分析器Wireshark。

protocol analyzer Wireshark

  • 它分配了一个动态识别的端口(在这个例子中是11012),并将其发送给客户端应用程序。

dynamically identified port

  • 应用程序使用这个11012端口并连接到目标Azure SQL数据库。

Connection to Target DB

  • 对于后续的连接,它不需要网关。应用程序可以使用收到的端口直接连接到Azure SQL数据库。

综上所述,在重定向方法中,客户端需要以下条件。

  • 客户端应允许从客户端到Azure SQL DB区域网关IP地址的1433端口的出站通信
  • 客户端应允许从客户端到Azure SQL IP地址(按区域)在11000到11999范围内的出站通信

architecture overview

图片参考

代理模式

代理模式是来自Azure网络(互联网)的流量的默认模式。它使用Azure SQL数据库网关进行通信。因此,客户端需要在1433端口与Azure SQL网关进行出站通信。

下图显示了代理连接策略。

Diagram that shows how the TCP session is established via the Azure SQL Database gateway and all subsequent packets flow via the gateway.

图片参考

默认的

Azure在部署过程中会自动为所有服务器分配默认的连接策略。

  • 重定向。适用于来自Azure网络内部的所有客户端连接,如Azure VM。
  • 代理。对于来自Azure网络外的所有客户端连接,如互联网

注意:我们注意到,重定向连接策略提供了更多的吞吐量和更少的延迟,因此推荐使用。

查看和修改现有的连接策略

我们可以在Azure门户防火墙和Azure SQL DB的网络连接中选择需要的连接策略。

existing connection policy

你也可以使用下面的Azure CLI脚本来列出连接策略并进行修改。你可以使用Azure Cloud Shell来运行CLI脚本。

注意:关于Bash或PowerShell脚本的云外壳配置,请参考文章An overview of Azure Cloud Shell

# 获取SQL服务器ID

sqlserverid=$(az sql server show -n azuredemosqldemo -g myazurelabsql --query 'id' -o tsv)

# 设置URI

ids="$sqlserverid/connectionPolicies/Default"

# 获取当前的连接策略

az resource show --ids $ids

AZURE CLI command output

下面的脚本将连接策略更新为Redirect。

az resource update --ids $ids --setproperties.connectionType=Redirect

Update Azure resources

如下所示,在我现有的Azure数据库中,az资源显示返回Redirect。

Redirect connection Policy

下面的脚本将连接策略更新为Proxy。

az resource update --ids $ids --setproperties.connectionType=Proxy

Proxy  connection Policy

最小的TLS版本

我们可以为Azure SQL数据库配置最小传输层安全(TLS)版本。如下图所示,它支持TLS 1.0、1.1和1.2版本。

Minimal TLS version

假设你为Azure SQL DB配置了最小TLS 1.1。它显示用户使用TLS 1.1和1.2,而TLS 1.0连接请求被拒绝。因此,你应该测试你的应用程序并相应地配置最小TLS。然而,出于安全考虑,建议使用最新的TLS版本。

你可以在Azure门户或Azure CLI中配置最小TLS版本。修改TLS版本并保存防火墙请求。

Modify TLS version to 1.1

你可以运行以下CLI脚本来检查SQL数据库的最小TLS版本。 minimal TLS version

az sql server show -n azuredemosqldemo -g myazurelabsql --query "minimTlsVersion"

az sql server更新脚本更新最小TLS版本。例如,下面的脚本将TLS版本更新为1.2

az sql server update -n azuredemosqldemo -g myazurelabsql --setminimalTlsVersion="1.2"

Change TLS version to 1.2

如果我们重新运行az sql server show,它会返回更新后的最小TLS版本。

az sql server show command

注意:用户使用的TLS版本小于Azure SQL数据库配置的最小TLS版本,会出现错误47072 - 使用 无效的TLS版本登录失败。

Azure SQL连接性检查程序

我们可以使用PowerShell脚本来测试本地机器和Azure SQL数据库的连接。该脚本存储在GitHub存储库github.com/Azure/SQL-C…它支持Azure SQL DB、Managed Instance和Azure synapses。

打开URL,在PowerShell ISE中复制该脚本。修改参数 - Azure服务器名称、数据库名称、用户凭证。执行该脚本,它将检查与网关的连接,在不同的端口进行重定向策略检查。如果在与Azure SQL DB联系时有任何问题,测试就会失败,你可以进一步对具体的组件进行故障排除。

Azure SQL Connectivity Checker

TCP test connection

Connection to master and Azure database

为了进行演示,我把客户的IP从IP防火墙中删除。因此,Azure防火墙将不允许客户端与Azure SQL数据库的连接。现在,我重新执行了PowerShell脚本,它在测试与主数据库的连接时出现了错误。根据消息,客户端的IP地址不允许访问服务器。

Error in connection to client IP from IP firewalls

如果有任何连接失败,该脚本也给出了建议的行动。例如,我的演示说要使用Azure管理门户或主数据库中的sp_set_firewall_rule存储过程创建一个防火墙规则。如果你需要帮助,你可以参考建议行动部分给出的URL。

Recommended Actions

总结

这篇文章探讨了从Azure内部或公共网络(互联网)连接的客户端的Azure SQL数据库连接架构。此外,我们还讨论了连接策略、最小TLS版本和访问公共网络的配置。重定向连接策略是一种推荐的方式,因为它提供最小的延迟和更好的吞吐量。