首批通过分布式安全可靠测评,为关键业务系统打造
sql_firewall_config
更新时间:2026-04-14 17:41:09
sql_firewall_config 用于设置防火墙拦截规则。
说明
该配置项自 4.3.2 版本开始引入。
| 属性 | 描述 |
|---|---|
| 参数类型 | 字符串类型 |
| 默认值 | 空字符串 |
| 取值范围 | 特定规则的 JSON 字符串,详细规则见 规则介绍。 |
| 是否重启 ODP 生效 | 否 |
规则介绍
JSON 字符串中有如下可配置字段:
| 字段 | 描述 |
|---|---|
| limitName | 需配置为字符串,表示限流规则的名称,不同限流规则名称可以相同,仅影响限流触发时的信息显示。 |
| qps | 需配置为整数字符串,代表当前规则限制的 SQL 所能达到的 QPS,qps <= 0 代表拦截执行。 |
| rule | JSON 对象,不同属性代表了不同的触发条件,有以下可选属性值:sqlType、keyWords、tableName、scene。如果存在多个触发条件,需要用户的 SQL 满足每个触发条件才表示完整触发。 |
| rule.sqlType | 字符串数据,设置拦截的 SQL 类型。触发条件为用户的 SQL 类型与设置值相同,未配置该字段表示全部拦截。有以下可选值:"ALL"(表示全部拦截)、"SELECT"、"UPDATE"、"INSERT"、"REPLACE"、"DELETE"、"MERGE"。 |
| rule.keyWords | 需配置为字符串,支持正则表达式,触发条件为用户 SQL 与表达式规则相匹配。 |
| rule.tableName | 需配置为字符串,支持正则表达式,触发条件为用户 SQL 的表名与配置值相匹配,配置为空表示匹配所有表名。 |
| rule.scene | 需配置为字符串,有如下两个可选值:
|
| status | 需配置为字符串,有如下可选值:
|
| username | 字符串数组,配置限流规则的目标用户,为空或不存在该字段表示目标用户为所有用户,不为空则需要根据用户名匹配目标用户。 |
| inUse | 布尔值,控制是否启用规则,默认为 true,为 false 表示该规则状态为未启用。 |
配置示例如下:
拦截特定类型的 SQL,拦截 SELECT、INSERT、DELETE 类型的 SQL,规则状态未启用
{"limiters": [ {"limitName":"limit_sql_types_1","qps":"0","rule":{"sqlType":["SELECT", "INSERT", "DELETE"]}, "status":"RUNNING","inUse":false} ] }拦截无 where 条件的 SQL,拦截未使用
where关键字的 SELECT、UPDATE、DELETE 类型 SQL 执行,规则状态已启用{"limiters": [ {"limitName":"limit_no_where_1","qps":"0","rule":{"scene":"Nowhere", "sqlType":["SELECT", "UPDATE", "DELETE"]}, "status":"RUNNING", "inUse":true} ] }拦截使用了 like 子句的 SQL,监控使用
like关键字的 SELECT、UPDATE、DELETE 类型 SQL 执行,将 SQL 记录到obproxy_limit.log,但不会拦截,规则状态已启用{"limiters": [ {"limitName":"limit_use_like_1","qps":"0","rule":{"scene":"Uselike", "sqlType":["SELECT", "UPDATE", "DELETE"]}, "status":"OBSERVER", "inUse":true} ] }拦截自定义 SQL,拦截
user1、user2用户使用ORDER BY或者GROUP BY的 SQL 执行,规则状态已启用{"limiters": [ {"limitName":"limit_key_word_no_order_by_or_group_by","qps":"0","rule":{"keyWords":"ORDER\s+BY|GROUP\s+BY"}, "status":"RUNNING", "username":["user1","user2"],"inUse":true}, {"limitName":"limit_use_like_1","qps":"0","rule":{"scene":"Nowhere", "sqlType":["SELECT", "UPDATE"]}, "status":"OBSERVER", "inUse":true}, {"limitName":"limit_no_where_1","qps":"0","rule":{"scene":"Nowhere", "sqlType":["UPDATE", "DELETE"]}, "status":"RUNNING", "inUse":true} ] }
示例
更新防火墙配置
此处以更新租户级别防火墙配置为例,多级配置项的更新介绍可参见 配置项说明 中 修改配置项。
replace into proxy_config(cluster_name, tenant_name, name, value, config_level) values ('test_cluster', 'test_tenant', 'sql_firewall_config', '{"limiters": [ {"limitName":"limit_sql_types_1","qps":"0","rule":{"sqlType":["SELECT", "INSERT", "DELETE"]}, "status":"RUNNING","inUse":false} ] }', 'LEVEL_TENANT');查询防火墙配置
此处以查看 VIP 级别防火墙配置为例,多级配置项的查看介绍可参见 配置项说明 中 查看配置属性。
select * from proxy_config where vid = 0 and vip = '10.10.10.1' and vport = 2 and name = 'sql_firewall_config';删除防火墙配置
删除 VIP 级别防火墙配置
delete from proxy_config where vid = 0 and vip = '10.10.10.1' and vport = 2 and name = 'sql_firewall_config';删除全局防火墙配置
replace into proxy_config(name, value, config_level) values ('sql_firewall_config', '', 'LEVEL_GLOBAL');