使用sp_delete_database_firewall_rule删除灰色Azure SQL防火墙规则失败
Azure SQL灰色防火墙规则TSQL删除无效的问题排查与解决
核心错误:混淆服务器级与数据库级防火墙规则的操作对象
你操作时的关键问题是搞混了两类防火墙规则对应的操作存储过程:
- 从
sys.firewall_rules查询到的是服务器级防火墙规则,也就是你在门户里看到的灰色规则,但你误用了仅针对数据库级规则的sys.sp_delete_database_firewall_rule存储过程,这个操作只对sys.database_firewall_rules视图里的数据库级规则生效,所以第一次删除会显示(0 rows affected),完全没触达目标规则。 - 后续执行
sys.sp_set_database_firewall_rule是创建/修改数据库级规则,和你要处理的服务器级灰色规则无关,即便删除这个新建的数据库级规则,也不会改变门户里服务器级规则的状态。
正确操作步骤
确认目标规则归属:执行以下语句确认规则是服务器级:
SELECT name, start_ip_address, end_ip_address FROM sys.firewall_rules;该视图返回的就是Azure门户中显示的服务器级防火墙规则,包括灰色状态的规则。
执行正确的删除语句:使用服务器级规则的删除存储过程,替换规则名称后执行:
EXECUTE sys.sp_delete_firewall_rule N'你的灰色规则名称';验证删除结果:重新查询
sys.firewall_rules确认目标规则已移除,之后刷新Azure门户的SQL服务器网络设置页面,灰色规则会同步消失。
补充说明
- 门户中灰色的服务器级防火墙规则多为系统自动生成(如允许Azure服务访问的规则)或自动化部署的规则,无法在门户直接操作,必须通过服务器级TSQL命令处理。
- 服务器级与数据库级防火墙规则是独立的两套配置,对应不同的系统视图和存储过程,操作时务必匹配对应层级的工具。
内容的提问来源于stack exchange,提问作者DinahMoeHumm
相关产品推荐
相关产品推荐

