你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
applies to:Azure SQL Database
Azure Synapse Analytics
例如,在名为
注意
Microsoft Entra ID以前称为Azure Active Directory(Azure AD)。
防火墙的工作原理
从 Internet 和 Azure 的连接请求必须先通过防火墙,然后才能到达服务器、数据库,如图示。
```zh-CN
```
重要
Azure Synapse仅支持服务器级 IP 防火墙规则。 不支持数据库级 IP 防火墙规则。
服务器级别 IP 防火墙规则
这些规则允许客户端访问整台服务器,即服务器所管理的所有数据库。 规则存储在 master 数据库中。 服务器的服务器级 IP 防火墙规则的最大数目限制为 256 个。 如果已启用 Allow Azure 服务和资源来访问此服务器设置,则这算作服务器的单个防火墙规则。
可以使用Azure门户、PowerShell 或Transact-SQL语句来配置服务器级 IP 防火墙规则。
注意
使用 Azure 门户进行配置时,服务器级 IP 防火墙规则的最大数目限制为 256。
- 只有订阅所有者或订阅参与者才能使用门户或 PowerShell。
- 若要使用 Transact-SQL,您必须以服务器级别主体登录或 Microsoft Entra 管理员身份连接到
master数据库。 (必须首先由具有Azure级权限的用户创建服务器级 IP 防火墙规则。
注意
默认情况下,在从 Azure 门户创建新的逻辑 SQL 服务器期间,Allow Azure 服务和资源访问此服务器设置为 No。
数据库级 IP 防火墙规则
数据库级别 IP 防火墙规则允许客户端访问特定(安全)数据库。 为每个数据库(包括 master 数据库)创建规则,这些规则存储在单个数据库中。
- 只能使用 Transact-SQL 语句,仅在配置第一个服务器级防火墙之后,才能为
master和用户数据库创建和管理数据库级 IP 防火墙规则。 - 如果在数据库级 IP 防火墙规则中指定的 IP 地址范围超出了在服务器级 IP 防火墙规则中指定的范围,只有 IP 地址处于数据库级范围内的客户端才能访问数据库。
- 默认值为一个数据库最多 256 个数据库级 IP 防火墙规则。 有关配置数据库级 IP 防火墙规则的详细信息,请参阅本文后面的示例,并参阅 sp_set_database_firewall_rule (Azure SQL Database)。
有关如何设置防火墙规则的建议
尽可能使用数据库级 IP 防火墙规则。 这种做法可以增强安全性并提高数据库的可移植性。 使用面向管理员的服务器级 IP 防火墙规则。 如果有多个访问要求相同的数据库,并且你不希望花时间来单独配置每个数据库,也请使用此类规则。
注意
有关业务连续性上下文中的可移植数据库的信息,请参阅 配置和管理异地还原或故障转移Azure SQL Database安全性。
服务器级别与数据库级别 IP 防火墙规则
是否应将一个数据库的用户与另一个数据库完全隔离?
如果是,使用数据库级 IP 防火墙规则授予访问权限。 此方法可以避免使用服务器级 IP 防火墙规则,因为这些规则允许通过防火墙访问所有数据库, 从而降低防御深度。
IP 地址用户是否需要访问所有数据库?
如果是,请使用服务器级 IP 防火墙规则来减少必须配置 IP 防火墙规则的次数。
配置 IP 防火墙规则的人员或团队只能通过 Azure 门户、PowerShell 或 REST API 进行访问吗?
如果是,则必须使用服务器级 IP 防火墙规则。 数据库级 IP 防火墙规则只能通过Transact-SQL进行配置。
是否禁止配置 IP 防火墙规则的个人或团队在数据库级别拥有高级权限?
如果是,请使用服务器级 IP 防火墙规则。 数据库级别至少需要 CONTROL DATABASE 权限才能通过Transact-SQL配置数据库级 IP 防火墙规则。
配置或审核 IP 防火墙规则的个人或团队是否集中管理多个(可能几百个)数据库的 IP 防火墙规则?
对于这种情况,最佳做法取决于需求和环境。 虽然服务器级别 IP 防火墙规则可能更易于配置,但脚本可以在数据库级别配置规则。 即使使用服务器级 IP 防火墙规则,也可能需要审核数据库级 IP 防火墙规则,以确定对数据库拥有 CONTROL 权限的用户是否已创建数据库级 IP 防火墙规则。
能否同时使用服务器级和数据库级 IP 防火墙规则?
是的。 一些用户(如管理员)可能需要服务器级 IP 防火墙规则。 另一些用户(如数据库应用程序用户)可能需要数据库级别 IP 防火墙规则。
从 Internet 进行连接
在计算机尝试从 Internet 连接到服务器时,防火墙首先针对请求连接的数据库,根据数据库级别 IP 防火墙规则来检查请求的发起 IP 地址。
- 如果地址在数据库级别 IP 防火墙规则中指定的范围内,则包含规则的数据库会获得连接授权。
- 如果地址不在数据库级 IP 防火墙规则中指定的范围内,防火墙会检查服务器级 IP 防火墙规则。 如果地址在服务器级 IP 防火墙规则中指定的范围内,则会为连接授权。 服务器级别 IP 防火墙规则适用于服务器管理的所有数据库。
- 如果地址不在任何数据库级或服务器级 IP 防火墙规则中指定的范围内,连接请求将会失败。
注意
若要从本地计算机访问Azure SQL Database,请确保网络上的防火墙和本地计算机允许 TCP 端口 1433 上的传出通信。
来自Azure内部的连接
若要允许托管在Azure内的应用程序连接到 SQL Server,需要启用Azure连接。 为此,请创建一个防火墙规则,其起始 IP 地址和结束 IP 地址设置为 0.0.0.0。 此规则仅适用于Azure SQL Database。
当来自Azure的应用程序尝试连接到服务器时,防火墙会通过验证此防火墙规则来检查是否允许Azure连接。 可以直接从Azure门户窗格的防火墙和虚拟网络设置中,将允许Azure服务和资源访问此服务器切换为开启来启用此功能。 将设置切换为“启用”会为 IP 0.0.0.0 - 0.0.0.0 创建一项名为“AllowAllWindowsAzureIps”的入站防火墙规则。 该规则可以在 master 数据库 sys.firewall_rules 视图中查看。 使用 PowerShell 或Azure CLI创建一个防火墙规则,如果不使用门户,则起始和结束 IP 地址设置为 0.0.0.0。
警告
启用此选项允许来自 all Azure 服务(包括在其他客户订阅中运行的服务)的连接。 此规则不会限制对订阅或资源组的访问 — 任何具有出站连接到 Azure SQL 数据库的 Azure 资源都可以连接。 启用此设置时,请确保登录名和用户权限仅限制对已授权用户的访问权限。
以下Azure服务通常使用此规则连接到Azure SQL Database:
- Azure App Service和Azure Functions
- Azure Data Factory
- Azure Stream Analytics
- Azure Logic Apps
- Azure Power BI
- Azure AI services
为了增强安全性,请考虑使用 虚拟网络服务终结点 或 专用终结点 ,而不是 AllowAllWindowsAzureIps 规则。 这些替代方法限制与特定子网或专用网络的连接,而不是允许所有Azure IP 地址。
权限
若要为 Azure SQL Server创建和管理 IP 防火墙规则,需要具有以下角色之一:
- 在 SQL Server Contributor 角色中
- 处于 SQL 安全管理员角色
- 包含 Azure SQL Server的资源的所有者
创建和管理 IP 防火墙规则
通过使用 Azure 门户或使用 Azure PowerShell、Azure CLI 或 Azure REST API,创建第一个服务器级防火墙设置。 使用这些方法或Transact-SQL创建和管理其他服务器级 IP 防火墙规则。
重要
只能使用Transact-SQL创建和管理数据库级 IP 防火墙规则。
为了提升性能,服务器级别 IP 防火墙规则暂时在数据库级别缓存。 若要刷新高速缓存,请参阅 DBCC FLUSHAUTHCACHE。
提示
可以使用 Auditing for Azure SQL Database 和 Azure Synapse Analytics 来审核服务器级和数据库级防火墙更改。
使用 Azure 门户管理服务器级 IP 防火墙规则
若要在 Azure 门户中设置服务器级 IP 防火墙规则,请转到数据库或服务器的概述页。
提示
有关教程,请参阅 Quickstart:创建单一数据库 - Azure SQL Database。
从数据库概述页
若要在数据库概述页中设置服务器级 IP 防火墙规则,请选择工具栏上的“设置服务器防火墙”,如下图所示。
此时会打开服务器的“网络”页。
在“防火墙规则”部分添加规则,以添加正在使用的计算机的 IP 地址,然后选择“保存”。 此时,系统针对当前 IP 地址创建服务器级别 IP 防火墙规则。
从服务器概述页
此时会打开服务器的概述页。 它显示完全限定的服务器名称(如 mynewserver20170403.database.windows.net),并提供用于进一步配置的选项。
若要在此页中设置服务器级规则,请在左侧的“设置”菜单中选择“网络”。
在“防火墙规则”部分添加规则,以添加正在使用的计算机的 IP 地址,然后选择“保存”。 此时,系统针对当前 IP 地址创建服务器级别 IP 防火墙规则。
使用Transact-SQL管理 IP 防火墙规则
| 目录视图或存储过程 | 级别 | 说明 |
|---|---|---|
| sys.firewall_rules | 服务器 | 显示当前服务器级别 IP 防火墙规则 |
| sp_set_firewall_rule | 服务器 | 创建或更新服务器级别 IP 防火墙规则 |
| sp_delete_firewall_rule | 服务器 | 删除服务器级别 IP 防火墙规则 |
| sys.database_firewall_rules | 数据库 | 显示当前数据库级别 IP 防火墙规则 |
| sp_set_database_firewall_rule | 数据库 | 创建或更新数据库级别 IP 防火墙规则 |
| sp_delete_database_firewall_rule | 数据库 | 删除数据库级别 IP 防火墙规则 |
以下示例检查现有规则,在服务器 Contoso 上启用一系列 IP 地址,并删除 IP 防火墙规则:
SELECT * FROM sys.firewall_rules ORDER BY name;
接下来,添加服务器级别 IP 防火墙规则。
EXECUTE sp_set_firewall_rule @name = N'ContosoFirewallRule',
@start_ip_address = '192.168.1.1', @end_ip_address = '192.168.1.10'
若要删除服务器级 IP 防火墙规则,请执行 sp_delete_firewall_rule 存储过程。 以下示例删除规则 ContosoFirewallRule:
EXECUTE sp_delete_firewall_rule @name = N'ContosoFirewallRule'
使用 PowerShell 管理服务器级 IP 防火墙规则
注意
本文使用 Azure Az PowerShell 模块,这是推荐用于与Azure交互的 PowerShell 模块。 若要开始使用 Az PowerShell 模块,请参阅 Install Azure PowerShell。 若要了解如何迁移到 Az PowerShell 模块,请参阅 Migrate Azure PowerShell从 AzureRM 迁移到 Az。
重要
PowerShell Azure Resource Manager(AzureRM)模块已于 2024 年 2 月 29 日弃用。 所有未来的开发都应使用 Az.Sql 模块。 建议用户从 AzureRM 迁移到 Az PowerShell 模块,以确保持续支持和更新。 不再维护或支持 AzureRM 模块。 Az PowerShell 模块和 AzureRM 模块中命令的参数基本相同。 有关兼容性的详细信息,请参阅 新的 Az PowerShell 模块简介。
| Cmdlet (命令行工具) | 级别 | 说明 |
|---|---|---|
| Get-AzSqlServerFirewallRule | 服务器 | 返回当前的服务器级防火墙规则 |
| New-AzSqlServerFirewallRule | 服务器 | 新建服务器级防火墙规则 |
| Set-AzSqlServerFirewallRule | 服务器 | 更新现有服务器级防火墙规则的属性 |
| Remove-AzSqlServerFirewallRule | 服务器 | 删除服务器级防火墙规则 |
以下示例使用 PowerShell 设置服务器级 IP 防火墙规则:
New-AzSqlServerFirewallRule -ResourceGroupName "myResourceGroup" `
-ServerName $servername `
-FirewallRuleName "ContosoIPRange" -StartIpAddress "192.168.1.0" -EndIpAddress "192.168.1.255"
提示
对于 $servername,请指定服务器名称而不是完全限定的 DNS 名称(例如,指定 mysqldbserver 而不是 mysqldbserver.database.windows.net)。
有关快速入门中 PowerShell 的示例,请参阅 用于 Azure SQL Database 的 Azure PowerShell 示例 和 使用 PowerShell 创建单个数据库并配置服务器级防火墙规则。
使用 CLI 管理服务器级 IP 防火墙规则
| Cmdlet (命令行工具) | 级别 | 说明 |
|---|---|---|
| az sql 服务器防火墙规则创建 | 服务器 | 创建服务器 IP 防火墙规则 |
| az sql server firewall-rule list(列出 SQL 服务器防火墙规则) | 服务器 | 列出服务器上的 IP 防火墙规则 |
| az sql server firewall-rule show(显示SQL服务器防火墙规则) | 服务器 | 显示 IP 防火墙规则的详细信息 |
| az sql server firewall-rule update (更新 SQL 服务器防火墙规则) | 服务器 | 更新 IP 防火墙规则 |
| az sql server 防火墙规则删除 | 服务器 | 删除 IP 防火墙规则 |
以下示例使用 CLI 设置服务器级 IP 防火墙规则:
az sql server firewall-rule create --resource-group myResourceGroup --server $servername \
-n ContosoIPRange --start-ip-address 192.168.1.0 --end-ip-address 192.168.1.255
提示
对于 $servername,请指定服务器名称,不要指定完全限定的 DNS 名称。 例如,请使用 mysqldbserver 而不是 mysqldbserver.database.windows.net。
有关快速入门上下文中的 CLI 示例,请参阅 Azure SQL Database 的 Azure CLI 示例 和 使用 Azure CLI 创建单个数据库并配置防火墙规则。
有关Azure Synapse Analytics,请参阅以下示例:
| Cmdlet (命令行工具) | 级别 | 说明 |
|---|---|---|
| az synapse workspace firewall-rule create | 服务器 | 创建防火墙规则 |
| az synapse workspace firewall-rule delete命令用于删除Synapse工作区防火墙规则。 | 服务器 | 删除防火墙规则 |
| az synapse workspace firewall-rule list(列出 Azure Synapse 工作区的防火墙规则) | 服务器 | 列出所有防火墙规则 |
| az synapse workspace firewall-rule show(执行查看 Synapse 工作区防火墙规则的命令) | 服务器 | 获取防火墙规则 |
| az synapse workspace 更新防火墙规则 | 服务器 | 更新防火墙规则 |
| 请等待 az synapse workspace firewall-rule 完成 | 服务器 | 将 CLI 置于等待状态,直到防火墙规则的条件得到满足 |
以下示例使用 CLI 在Azure Synapse中设置服务器级 IP 防火墙规则:
az synapse workspace firewall-rule create --name AllowAllWindowsAzureIps --workspace-name $workspacename --resource-group $resourcegroupname --start-ip-address 0.0.0.0 --end-ip-address 0.0.0.0
使用 REST API 管理服务器级 IP 防火墙规则
| API | 级别 | 说明 |
|---|---|---|
| 列出防火墙规则 | 服务器 | 显示当前服务器级别 IP 防火墙规则 |
| 创建或更新防火墙规则 | 服务器 | 创建或更新服务器级别 IP 防火墙规则 |
| 删除防火墙规则 | 服务器 | 删除服务器级别 IP 防火墙规则 |
| 获取防火墙规则 | 服务器 | 获取服务器级别 IP 防火墙规则 |
了解防火墙更新的延迟
服务器身份验证模型对于安全设置的所有更改延迟为 5 分钟,除非包含数据库且没有故障转移伙伴。 在没有故障转移伙伴的情况下对包含的数据库所做的更改是即时的。 对于具有备用服务器的独立数据库,主数据库上的每次安全更新都是即时生效,但辅助数据库可能需要长达 5 分钟才能反映更改。
下表根据数据库类型和故障转移配置描述了安全设置更改的延迟:
| 身份验证模型 | 已配置的故障转移 | 安全设置更改的延迟 | 潜伏实例 |
|---|---|---|---|
| 服务器身份验证 | 是的 | 5 分钟 | 所有数据库 |
| 服务器身份验证 | 否 | 5 分钟 | 所有数据库 |
| 包含的数据库 | 是的 | 5 分钟 | 辅助数据库 |
| 包含的数据库 | 否 | 没有 | 没有 |
手动刷新防火墙规则
如果需要看到防火墙规则的更新速度比 5 分钟延迟更快,可以手动刷新防火墙规则。 登录到需要更新其规则的数据库实例,并运行 DBCC FLUSHAUTHCACHE。 这将导致数据库实例刷新其本地缓存和刷新防火墙规则。
DBCC FLUSHAUTHCACHE[;]
排查数据库防火墙问题
访问Azure SQL Database的行为不符合预期时,请考虑以下几点。
本地防火墙配置:
在计算机可以访问Azure SQL Database之前,可能需要在计算机上为 TCP 端口 1433 创建防火墙例外。 若要在Azure云边界内建立连接,可能需要打开其他端口。 有关详细信息,请参阅《端口超出1433:SQL 数据库外部与内部》部分,属于 ADO.NET 4.5。
网络地址转换:
由于网络地址转换(NAT),计算机用来连接到Azure SQL Database的 IP 地址可能与计算机的 IP 配置设置中的 IP 地址不同。 若要查看计算机用于连接到Azure的 IP 地址,
- 登录到门户。
- 转到托管数据库的服务器上的“配置”选项卡。
- “允许的 IP 地址”部分下显示了“当前客户端 IP 地址”。 选择“允许的 IP 地址”旁边的“添加”,以允许此计算机访问服务器。
对允许列表的更改尚未生效:
更改Azure SQL Database防火墙配置可能最多延迟 5 分钟才能生效。
登录名未授权或使用了错误的密码:
如果某个登录名对服务器没有权限或者使用的密码不正确,则与服务器的连接会被拒绝。 创建防火墙设置只能为客户端提供尝试连接到服务器的机会。 客户端仍必须提供所需的安全凭据。 有关准备登录名的详细信息,请参阅 授权数据库访问 SQL 数据库、SQL 托管实例 和 Azure Synapse Analytics 的权限。
动态 IP 地址:
如果你的 Internet 连接使用动态 IP 寻址,并且在通过防火墙时遇到问题,请尝试以下解决方法之一:
- 请求 Internet 服务提供商提供分配给访问服务器的客户端计算机的 IP 地址范围。 将此 IP 地址范围添加为 IP 防火墙规则。
- 改为获取客户端计算机的静态 IP 地址。 将 IP 地址添加为 IP 防火墙规则。
相关内容
- Microsoft Azure数据中心 IP 范围
在 Azure SQL Database - 客户端快速入门代码示例至 Azure SQL 数据库
- ADO.NET 4.5 的端口超出 1433
- 概述Azure SQL Database和SQL Managed Instance安全功能