数据库防火墙算法 #
匹配算法 #
风险 DDL 匹配算法 #
类型:RISK_DDL
可配置属性:
属性名称 | 数据类型 | 说明 | 默认值 |
---|---|---|---|
truncate-table | boolean | 是否匹配 TRUNCATE TABLE 语句 | true |
drop-table | boolean | 是否匹配 DROP TABLE 语句 | true |
alter-table | boolean | 是否匹配 ALTER TABLE 语句 | true |
风险 DML 匹配算法 #
类型:RISK_DML
可配置属性:
属性名称 | 数据类型 | 说明 | 默认值 |
---|---|---|---|
full-table-update | boolean | 是否匹配全表更新语句 | true |
full-table-delete | boolean | 是否匹配全表删除语句 | true |
说明:全表更新、全表删除指不包含 WHERE 条件的 UPDATE 和 DELETE 语句。
关联查询匹配算法 #
类型:JOIN_QUERY
可配置属性:
属性名称 | 数据类型 | 说明 | 默认值 |
---|---|---|---|
max-allowed-join-table-count | int | 最大允许关联表数量 | 3 |
说明:不区分 JON 类型,如 LEFT JOIN、RIGHT JOIN 等。
子查询匹配算法 #
类型:SUBQUERY
可配置属性:
属性名称 | 数据类型 | 说明 | 默认值 |
---|---|---|---|
max-allowed-subquery-count | int | 最大允许子查询嵌套层数 | 1 |
分片条件匹配算法 #
类型:SHARDING
可配置属性:
属性名称 | 数据类型 | 说明 | 默认值 |
---|---|---|---|
select-without-sharding-column | boolean | 是否匹配不带分片键的 SELECT 语句 | true |
update-without-sharding-column | boolean | 是否匹配不带分片键的 UPDATE 语句 | true |
delete-without-sharding-column | boolean | 是否匹配不带分片键的 DELETE 语句 | true |
说明:INSERT 语句是强制需要分片键的,无需通过数据库防火墙规则检查,因此不包含在此算法内。
缺少 WHERE 条件匹配算法 #
类型:MISSING_WHERE_CONDITION
可配置属性:
属性名称 | 数据类型 | 说明 | 默认值 |
---|---|---|---|
columns | string | 要匹配的列 | 无 |
insert | boolean | 是否匹配 INSERT 语句 | true |
select | boolean | 是否匹配 SELECT 语句 | true |
update | boolean | 是否匹配 UPDATE 语句 | true |
delete | boolean | 是否匹配 DELETE 语句 | true |
说明:若 DML 语句中未包含 columns 对应列的 where 条件,则匹配成功。
HOST 地址匹配算法 #
类型:HOST
可配置属性:
属性名称 | 数据类型 | 说明 | 默认值 |
---|---|---|---|
blacklist | String | 黑名单,表示此算法要匹配的地址 | 无 |
whitelist | String | 白名单,表示此算法要放行的地址 | 无 |
说明:
- 声明算法时,blacklist 和 whitelist 至少需要定义一种,不能同时为空;
- 仅支持 IP 地址,如 ‘127.0.0.1’,不支持主机名方式;
- 黑白名单均支持多个元素,以逗号分隔,如 ‘127.0.0.1, 10.9.100.5’;
- 算法规则:当前地址在黑名单或【白名单不为空且当前地址不在白名单中】,即为匹配成功;
- 若黑名单和白名单存在重复元素,黑名单优先级更高。
用户名匹配算法 #
类型:USERNAME
可配置属性:
属性名称 | 数据类型 | 说明 | 默认值 |
---|---|---|---|
blacklist | String | 黑名单,表示此算法要匹配的用户名 | 无 |
whitelist | String | 白名单,表示此算法要放行的用户名 | 无 |
说明:
- 声明算法时,blacklist 和 whitelist 至少需要定义一种,不能同时为空;
- 仅匹配用户名称,不区分登录地址;
- 黑白名单均支持多个元素,以逗号分隔,如 ‘root, sharding’;
- 算法规则:当前用户在黑名单或【白名单不为空且当前用户名不在白名单中】,即为匹配成功;
- 若黑名单和白名单存在重复元素,黑名单优先级更高。
角色匹配算法 #
类型:ROLE
可配置属性:
属性名称 | 数据类型 | 说明 | 默认值 |
---|---|---|---|
blacklist | String | 黑名单,表示此算法要匹配的角色 | 无 |
whitelist | String | 白名单,表示此算法要放行的角色 | 无 |
说明:
- 声明算法时,blacklist 和 whitelist 至少需要定义一种,不能同时为空;
- 黑白名单均支持多个元素,以逗号分隔,如 ‘role_dml, admin’;
- 算法规则:当前用户的角色有任意一个在黑名单中或【白名单不为空且当前用户的全部角色不在白名单中】,即为匹配成功;
- 若黑名单和白名单存在重复元素,黑名单优先级更高。
禁止加密字段关联查询算法 #
类型:ENCRYPT_JOIN_QUERY
无可配置属性:
说明:
- 配置该算法后,会禁止加密字段执行关联查询
数据库防火墙动作算法 #
日志记录 #
类型:LOG
可配置属性:
属性名称 | 数据类型 | 说明 | 默认值 |
---|---|---|---|
log-level | String | 输出日志级别,支持 DEBUG, INFO, WARN, ERROR | WARN |
说明:通过日志记录数据库防火墙事件,包含 db、user、host 及匹配的策略名称,如:
[WARN ] date time [THREAD] AUDIT - log by strategy: risk_dml_strategy db: sharding_db user: root host: 127.0.0.1
拦截 #
类型:BLOCK
说明:
- 通过日志记录数据库防火墙事件并进行拦截(抛出异常),日志包含 db、user、host 及匹配的策略名称,如:
[WARN ] date time [THREAD] AUDIT - block by strategy: risk_dml_strategy db: sharding_db user: root host: 127.0.0.1
- 拦截记录日志统一为 WARN 级别,暂不支持修改。