在这篇文章中,我们将探讨适用于Azure数据库的设置,控制与数据库的连接。
Azure门户中的连接设置
在Azure门户中,导航到Azure SQL Server和下面的防火墙和虚拟网络。
拒绝公共网络访问
默认情况下,Azure SQL数据库启用使用公共端点的连接。用户在使用VNET防火墙规则、数据库级防火墙或服务器级防火墙验证访问后,可以使用公共端点连接到SQL。
如果修改配置-拒绝公共网络访问为是,用户必须使用私有链接连接到Azure SQL。私有链接允许使用私有端点进行连接。
注意:我们在这篇文章中没有探讨私人链接。因此,你可以参考 Azure SQL数据库的Azure私有链接 来了解私有端点。
下面的流程图显示了高层的连接架构。
- 拒绝公共网络访问 = True:Azure检查私有端点并允许服务器范围内的连接
- 拒绝公共网络访问=False。
- 如果在VNET防火墙规则中发现有匹配的,则提供服务器范围的访问
- 如果没有VNET防火墙规则,则检查数据库级访问。如果IP被允许用于数据库级防火墙,则用户获得数据库范围的访问。
- 如果没有配置VNET和数据库级防火墙访问,Azure会检查服务器级防火墙。如果配置了防火墙,用户就可以获得服务器范围的访问。否则,连接将被拒绝
注意:除非配置了私有端点,否则你不能拒绝公共网络访问。如果你试图禁用它,你会得到错误42102 - 无法将拒绝公共网络访问设置为是,因为没有启用私人端点来访问服务器。请设置私有端点并重试操作。
注意:你可以参考文章,通过Azure CLI、PowerShell改变公共网络访问。
本节看的是具有直接网络流量的用户如何连接到Azure SQL数据库的内部组件。
为了建立与Azure SQL数据库的连接,客户端用1433端口的公共IP地址连接到网关(GW)。网关将连接重定向到具有适当连接策略的数据库集群 - 重定向或代理。数据库集群将流量转发到所需的数据库。
Azure SQL Server支持以下连接策略。
重定向。
在重定向连接策略中,客户端直接建立与SQL数据库节点的连接。重定向策略不需要后续连接的网关,因此,它可以提供更好的吞吐量和减少延迟。 默认情况下,如果连接是在微软Azure内部产生的,Azure会使用重定向连接机制。
为了了解重定向机制,我们将在Azure虚拟机内使用Wireshark网络监控工具。从Azure虚拟机中,我们启动与Azure SQL数据库的连接,并捕获网络流量。
- 我的Azure VM的IP地址。10.0.0.4
- 运行nslookup命令来捕获Azure SQL DB的公共IP地址。它显示的IP地址是104.211.96.159
我的Azure SQL服务器在印度中部;因此,它使用的是微软文档中记载的以下范围内的网关IP地址--网关IP地址
- 在第一步中,一旦我们从Azure VM向1433端口的Azure SQL DB发起新的连接请求,Wireshark就会捕获TCP连接请求,如下图所示。
注意:你可以从网址www.wireshark.org/,下载并安装网络协议分析器Wireshark。
- 它分配了一个动态识别的端口(在这个例子中是11012),并将其发送给客户端应用程序。
- 应用程序使用这个11012端口并连接到目标Azure SQL数据库。
- 对于后续的连接,它不需要网关。应用程序可以使用收到的端口直接连接到Azure SQL数据库。
综上所述,在重定向方法中,客户端需要以下条件。
- 客户端应允许从客户端到Azure SQL DB区域网关IP地址的1433端口的出站通信
- 客户端应允许从客户端到Azure SQL IP地址(按区域)在11000到11999范围内的出站通信
代理模式
代理模式是来自Azure网络(互联网)的流量的默认模式。它使用Azure SQL数据库网关进行通信。因此,客户端需要在1433端口与Azure SQL网关进行出站通信。
下图显示了代理连接策略。
默认的
Azure在部署过程中会自动为所有服务器分配默认的连接策略。
- 重定向。适用于来自Azure网络内部的所有客户端连接,如Azure VM。
- 代理。对于来自Azure网络外的所有客户端连接,如互联网
注意:我们注意到,重定向连接策略提供了更多的吞吐量和更少的延迟,因此推荐使用。
查看和修改现有的连接策略
我们可以在Azure门户防火墙和Azure SQL DB的网络连接中选择需要的连接策略。
你也可以使用下面的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 |
下面的脚本将连接策略更新为Redirect。
az resource update --ids $ids --setproperties.connectionType=Redirect |
如下所示,在我现有的Azure数据库中,az资源显示返回Redirect。
下面的脚本将连接策略更新为Proxy。
az resource update --ids $ids --setproperties.connectionType=Proxy |
最小的TLS版本
我们可以为Azure SQL数据库配置最小传输层安全(TLS)版本。如下图所示,它支持TLS 1.0、1.1和1.2版本。
假设你为Azure SQL DB配置了最小TLS 1.1。它显示用户使用TLS 1.1和1.2,而TLS 1.0连接请求被拒绝。因此,你应该测试你的应用程序并相应地配置最小TLS。然而,出于安全考虑,建议使用最新的TLS版本。
你可以在Azure门户或Azure CLI中配置最小TLS版本。修改TLS版本并保存防火墙请求。
你可以运行以下CLI脚本来检查SQL数据库的最小TLS版本。
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" |
如果我们重新运行az sql server show,它会返回更新后的最小TLS版本。
注意:用户使用的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联系时有任何问题,测试就会失败,你可以进一步对具体的组件进行故障排除。
为了进行演示,我把客户的IP从IP防火墙中删除。因此,Azure防火墙将不允许客户端与Azure SQL数据库的连接。现在,我重新执行了PowerShell脚本,它在测试与主数据库的连接时出现了错误。根据消息,客户端的IP地址不允许访问服务器。
如果有任何连接失败,该脚本也给出了建议的行动。例如,我的演示说要使用Azure管理门户或主数据库中的sp_set_firewall_rule存储过程创建一个防火墙规则。如果你需要帮助,你可以参考建议行动部分给出的URL。
总结
这篇文章探讨了从Azure内部或公共网络(互联网)连接的客户端的Azure SQL数据库连接架构。此外,我们还讨论了连接策略、最小TLS版本和访问公共网络的配置。重定向连接策略是一种推荐的方式,因为它提供最小的延迟和更好的吞吐量。