你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure SQL 数据库和 Azure Synapse Analytics 网络访问控制

适用于: Azure SQL 数据库 Azure Synapse Analytics(仅限专用 SQL 池)

Azure 门户为 Azure SQL 数据库和 Azure Synapse Analytics 创建逻辑服务器时,结果是格式为“yourservername.database.windows.net”的公共终结点。

可以使用以下网络访问控制来选择性地允许通过公共终结点访问数据库:

  • 允许 Azure 服务和资源访问此服务器:在启用时,Azure 边界范围内的其他资源(例如 Azure 虚拟机)可以访问 SQL 数据库
  • IP 防火墙规则:使用此功能可以显式允许从特定的 IP 地址(例如,从本地计算机)建立连接

还可以通过以下方式允许从虚拟网络对数据库进行专用访问:

  • 虚拟网络防火墙规则:使用此功能可以允许来自 Azure 边界内特定虚拟网络的流量
  • 专用链接:使用此功能可为特定虚拟网络内的 Azure 中的逻辑服务器创建专用终结点

重要

本文不适用于“SQL 托管实例”。 有关网络配置的详细信息,请参阅连接到 Azure SQL 托管实例

请观看下方视频,详细了解这些访问控制及其功能:

允许 Azure 服务

默认情况下,在从 Azure 门户创建新的逻辑服务器期间,“允许 Azure 服务和资源访问此服务器”未选中且未启用。 允许使用公共服务终结点建立连接时,将显示此设置。

创建逻辑服务器后,也可以按如下所示通过“网络”设置更改此设置:

Screenshot of manage server firewall

启用“允许 Azure 服务和资源访问此服务器”时,服务器会允许来自 Azure 边界内所有资源的通信,这可能是订阅的一部分,也可能不是订阅的一部分。

在许多情况下,启用该设置的访问权限宽松度会超过大多数客户的需要。 建议取消选中此设置并将其替换为限制性更强的 IP 防火墙规则或虚拟网络防火墙规则。

但是,这样做会影响在 Azure 中的虚拟机上运行的以下功能,这些虚拟机未包含在你的虚拟网络中,因此会通过 Azure IP 地址连接到数据库:

导入/导出服务

未启用“允许 Azure 服务和资源访问此服务器”时,导入导出服务不起作用。 不过,可通过以下方式解决此问题:在 Azure VM 中手动运行 SqlPackage,或者直接在代码中使用 DACFx API 执行导出

数据同步

若要在未启用“允许 Azure 服务和资源访问此服务器”的情况下使用数据同步功能,需要创建单个防火墙规则条目,以便为托管中心数据库的区域,从 SQL 服务标记添加 IP 地址。 将这些服务器级防火墙规则添加到托管“中心”和“成员”数据库的服务器(可能位于不同的区域)

使用以下 PowerShell 脚本生成与美国西部区域的 SQL 服务标记对应的 IP 地址

PS C:\>  $serviceTags = Get-AzNetworkServiceTag -Location eastus2
PS C:\>  $sql = $serviceTags.Values | Where-Object { $_.Name -eq "Sql.WestUS" }
PS C:\> $sql.Properties.AddressPrefixes.Count
70
PS C:\> $sql.Properties.AddressPrefixes
13.86.216.0/25
13.86.216.128/26
13.86.216.192/27
13.86.217.0/25
13.86.217.128/26
13.86.217.192/27

提示

即使指定 Location 参数,Get-AzNetworkServiceTag 也会返回 SQL 服务标记的全局范围。 请务必将范围筛选为托管同步组所用中心数据库的区域

请注意,PowerShell 脚本的输出采用无类域间路由 (CIDR) 表示法。 需要使用 Get-IPrangeStartEnd.ps1 将其转换为开始和结束IP地址的格式,如下所示:

PS C:\> Get-IPrangeStartEnd -ip 52.229.17.93 -cidr 26
start        end
-----        ---
52.229.17.64 52.229.17.127

可以使用此附加 PowerShell 脚本将所有 IP 地址从 CIDR 转换为开始和结束 IP 地址格式。

PS C:\>foreach( $i in $sql.Properties.AddressPrefixes) {$ip,$cidr= $i.split('/') ; Get-IPrangeStartEnd -ip $ip -cidr $cidr;}
start          end
-----          ---
13.86.216.0    13.86.216.127
13.86.216.128  13.86.216.191
13.86.216.192  13.86.216.223

现在可以将这些规则添加为不同的防火墙规则,然后禁用“允许 Azure 服务和资源访问此服务器”设置。

IP 防火墙规则

基于 IP 的防火墙是 Azure 中逻辑服务器的一项功能,在显式添加客户端计算机的 IP 地址之前,它会阻止对服务器的所有访问。

虚拟网络防火墙规则

除了 IP 规则外,服务器防火墙还允许定义虚拟网络规则。 若要了解详细信息,请参阅虚拟网络服务终结点和 Azure SQL 数据库规则

Azure 网络术语

在了解虚拟网络防火墙规则时,请注意以下 Azure 网络术语

虚拟网络: 可以让虚拟网络与 Azure 订阅相关联

子网: 虚拟网络包含子网。 你所拥有的任何 Azure 虚拟机 (VM) 都会分配到子网。 一个子网可能包含多个 VM 或其他计算节点。 虚拟网络之外的计算节点不能访问虚拟网络,除非已将安全性配置为允许这样的访问。

虚拟网络服务终结点虚拟网络服务终结点是一个子网,其属性值包括一个或多个正式的 Azure 服务类型名称。 本文介绍 Microsoft.Sql 的类型名称,即名为“SQL 数据库”的 Azure 服务。

虚拟网络规则: 服务器的虚拟网络规则是服务器的访问控制列表 (ACL) 中列出的子网。 该子网必须包含“Microsoft.Sql”类型名称才会列在 SQL 数据库中数据库的 ACL 中。 虚拟网络规则要求服务器接受来自子网上每个节点的通信。

IP 与虚拟网络防火墙规则

可以通过 Azure SQL 数据库防火墙规则指定 IP 地址范围,处于该范围内的通信允许进入 SQL 数据库。 此方法适用于 Azure 专用网络外部的稳定 IP 地址。 但是,对于 Azure 专用网络中的虚拟机 (VM),将为其配置动态 IP 地址。 当 VM 重启时,动态 IP 地址可能会更改,从而使得基于 IP 的防火墙规则失效。 处于生产环境中时,在防火墙规则中指定一个动态 IP 地址并不明智。

可以通过获取 VM 的静态 IP 地址来解决此限制。 有关详细信息,请参阅使用 Azure 门户创建具有静态公共 IP 地址的虚拟机。 但是,静态 IP 方法可能会变得难以管理,在规模大时操作成本高。

虚拟网络规则更容易建立,使用此类规则可以更轻松地管理从包含你的 VM 的特定子网进行的访问。

注意

目前,子网上不允许有 SQL 数据库。 如果服务器是虚拟网络子网上的一个节点,则虚拟网络中的所有节点都可以与 SQL 数据库通信。 在这种情况下,VM 可以与 SQL 数据库通信,不需任何虚拟网络规则或 IP 规则。

使用专用链接可以通过专用终结点连接到服务器。 专用终结点是特定虚拟网络和子网中的专用 IP 地址。

后续步骤