Azure SQL数据库提供了高性能、安全和可靠的管理型关系数据库服务。在设计数据库基础设施时,安全性是企业内部和云基础设施的首要关注领域。
你可以使用各种方式来保护你的数据库。
- 防火墙
- 认证
- 授权
- 权限
- 加密
本文探讨了限制连接到 Azure SQL 数据库的 IP 防火墙规则。
IP防火墙概述
Azure有两种针对Azure SQL数据库的防火墙。
- 服务器级防火墙
- 数据库级防火墙
让我们逐一探讨这些防火墙。
服务器级防火墙
服务器级别的防火墙规则适用于Azure SQL Server。因此,它适用于所有底层Azure SQL数据库。每个连接都必须通过防火墙,才能接触到Azure服务器或数据库。
默认情况下,一旦我们创建了一个新的Azure逻辑SQL服务器,服务器级防火墙就会阻止所有与公共端点的连接。公共端点是Azure服务器的FQDN,形式为[AzureServer].database.windows.net。
Azure在主数据库中存储防火墙规则。它允许一个Azure服务器最多有128个服务器级防火墙规则。如果你启用了选项--允许Azure服务和资源访问此服务器,那么它就被认为是一个单一的服务器防火墙规则。
要配置服务器级防火墙规则,可以使用Azure Portal、Azure CLI、Azure PowerShell或T-SQL语句。
使用Azure Portal设置服务器级防火墙规则
要配置服务器级防火墙规则,请连接到Azure门户并导航到Azure SQL数据库仪表板。在这里,你可以得到一个设置服务器防火墙的选项*,*如下图所示。
单击 "设置服务器防火墙 "以获得以下选项。
- 添加客户端IP:你可以使用这个选项,在允许连接到Azure SQL Server的IP中添加当前的客户端IP。你可以在 "客户端IP地址 "部分检查公共IP地址。
- 你也可以在开始IP和结束IP部分指定规则名称和IP地址范围。
一旦你点击添加客户端IP,它就会创建一个具有相同起始和结束IP地址的规则。
Azure SQL Server允许DB连接到单个IP地址或一系列IP地址的默认端口1433。
使用T-SQL设置服务器级防火墙规则
你可以在Azure SQL Server主数据库中执行存储过程sp_set_firewall_rule。例如,下面的T-SQL配置服务器级规则,命名为--允许IP地址为10.0.0.2的DB连接
-- Enable Azure connections.
exec sp_set_firewall_rule N'Allow DB Connections', '10.0.0.2', '10.0.0.2';
注意:要运行这个存储过程,你必须使用客户端工具(如SSMS、Azure Data Studio或SQLCMD)与主数据库连接。
数据库级IP防火墙规则
数据库防火墙规则是特定于特定Azure SQL数据库的。例如,如果你有三个Azure数据库,你需要单独配置它们。
- 数据库防火墙规则可以为主数据库或用户数据库进行配置。
- 要配置这些防火墙规则,需要配置第一个服务器级防火墙规则。
- T-SQL存储过程sp_set_database_firewall_rule可以创建数据库防火墙 规则*.*
- 数据库级防火墙覆盖特定数据库的服务器级防火墙。例如,假设你在数据库级防火墙中有一个IP地址,但在服务器级防火墙中没有。在这种情况下,客户端在数据库防火墙中有一个IP地址,可以查询数据库。
下面的T-SQL语句为IP地址10.0.0.4设置一个数据库级防火墙规则。你需要在需要数据库防火墙规则的数据库安全内容下运行这个。
EXECUTE sp_set_database_firewall_rule N'Example DB Rule','10.0.0.4','10.0.0.4';
服务器级别或数据库级别的规则是如何应用的?
下图显示,任何对Azure数据库的连接请求都必须满足防火墙的要求。
- 最初,Azure会检查数据库的防火墙规则。如果客户端的IP在数据库防火墙规则内,就可以直接访问数据库
- 如果没有数据库级的防火墙,或者客户端IP在数据库防火墙中不被允许,Azure会检查服务器级的防火墙规则
- 如果客户端的IP地址在服务器级防火墙的IP范围内,则允许连接
- 如果客户端IP地址没有指定在服务器级防火墙IP地址范围内,则拒绝连接
图片参考。微软
注意:服务器或数据库级别的防火墙限制了客户端与Azure SQL数据库的连接。但是,你仍然需要使用SQL或Azure Active Directory认证来验证。
在SSMS连接期间创建Azure防火墙规则
假设你从一个IP地址在服务器或数据库级防火墙中不允许的客户端连接。在这种情况下,SSMS会给出一个提示,如下图所示。
点击登录,用Azure账户认证自己,并添加一个新的防火墙规则。你可以添加客户的IP地址或子网的IP地址范围。
点击确定,就可以连接到Azure SQL数据库,如下图所示。
你可能有一个问题 - 在SSMS连接过程中创建的防火墙是服务器或数据库级别的防火墙规则。要确定在Azure门户中查看现有的服务器防火墙规则。如下图所示,它是一个服务器规则。因此,你应该使用之前指定的SP单独配置数据库防火墙规则。
使用T-SQL查看现有的防火墙规则
你也可以使用T-SQL语句查看现有的防火墙规则。让我们探讨一下这些查询。
- sys.firewall_rules。 它显示服务器级的IP防火墙规则。你可以在主数据库中查询它。
SELECT * FROM sys.firewall_rules
GO
- sys.database_firewall_rules:它 显示数据库的IP防火墙规则。你需要在你想查看数据库防火墙规则的数据库上执行这个脚本。
SELECT * FROM sys.database_firewall_rules
目前,它给出了零行,因为我没有配置数据库级防火墙。假设你的IP地址为10.0.0.4的客户需要数据库防火墙访问。为了允许他连接,你用下面的SP创建一个数据库防火墙规则。
EXECUTE sp_delete_firewall_rule @name = N'ClientIPAddress_2021-10-04_10:08:35'EXECUTE sp_set_database_firewall_rule N'Example DB Rule','10.0.0.4','10.0.0.4'
注意:你需要使用服务器防火墙中允许的客户端来连接并创建数据库防火墙。
你可以重新执行选择语句来查看配置的数据库防火墙规则。
删除一个数据库防火墙规则
你只能从T-SQL脚本存储过程sp_delete_database_firewall_rule中删除数据库防火墙规则。下面的脚本删除了名为 "示例数据库规则 "的数据库防火墙规则。
EXEC sp_delete_database_firewall_rule @name=N'Example DB Rule'
Go
删除一个服务器防火墙规则
你可以使用Azure门户或T-SQL语句删除服务器防火墙规则。在演示中,我将删除服务器级防火墙规则 - ClientIPAddress_2021-10-04_10:08:35。要删除这个规则,可以在主数据库上运行存储过程sp_delete_firewall_rule。
EXECUTE sp_delete_firewall_rule @name = N'ClientIPAddress_2021-10-04_10:08:35'
关于Azure SQL数据库防火墙的几个重要点
- 建议你为客户端连接实施数据库防火墙规则而不是服务器防火墙规则。它通过限制客户端对Azure SQL服务器中的所有数据库的访问来增强安全性。
- 如果客户使用动态IP地址,他们可能会在数据库连接中面临问题。在这种情况下,你可以采取以下措施之一
- 配置IP子网范围,允许该范围内所有IP地址的连接
- 使用静态IP地址并在防火墙中添加该静态IP
- 大多数时候,对Azure防火墙的更改是即时的。但是,更改可能需要5分钟才能生效
- 由于网络地址转换(NAT),你的计算机可能使用与ipconfig返回的IP地址不同的IP地址进行Azure DB连接。在这种情况下,你可以使用Azure门户来查看当前的公共IP地址,或者使用门户www.whatismyip.com/
- Azure服务器或数据库级别的防火墙允许客户端的IP地址连接Azure SQL Databases。但是,如果你的客户端有一个本地防火墙,你的请求可能无法到达Azure边界进行连接。在这种情况下,你必须在本地防火墙中也允许1433端口。
总结
本文探讨了Azure SQL数据库的服务器和数据库级防火墙的配置。防火墙是只允许授权客户连接到数据库的关键所在。你可以探索服务器和数据库的防火墙规则,并根据你的要求进行配置。请不要允许大范围的IP地址(如0.0.0.0),因为它可能无法起到防火墙保障数据库访问的作用。