
# SQL防御概述
当前大数据领域的SQL引擎层出不穷，在带给解决方案多样性的同时，也暴露出一定的问题，例如SQL输入语句质量良莠不齐、SQL问题难定位、大SQL语句消耗资源过多等。
低质量的SQL会对数据分析平台系统带来不可预料的冲击，影响系统的性能或者平台稳定性。
#### 约束与限制
- Hive、Spark、HetuEngine、ClickHouse的SQL防御功能仅MRS 3.3.0及之后版本的集群支持。
- Doris的SQL防御功能仅MRS 3.5.0及之后版本的集群支持。
 
#### SQL防御功能介绍
MRS在主力SQL引擎（Hive、Spark、HetuEngine、ClickHouse、Doris中增加SQL防御能力，基于用户可理解的SQL防御策略，实现对典型大SQL、低质量SQL的主动防御，包括事前拦截和事中熔断，并不强制改变用户的SQL提交方式、SQL语法，对业务零改动且易落地。
- 支持管理员界面化配置SQL防御策略，同时可支持防御规则的查询和修改。
- 每个SQL引擎在进行SQL业务响应、执行过程中，基于SQL防御策略进行主动防御行为。
- 管理员可将SQL防御行为在"提示"、"拦截"、"熔断"选项之间进行灵活切换，系统会将发生的SQL防御事件实时写入到防御审计日志中。运维人员可进行日志分析，评估现网SQL质量，提前感知潜在SQL风险，并做出有效预防措施。
SQL防御规则包含以下类型：
- 静态拦截规则：基于纯粹的SQL语法规则进行拦截或提示。
- 动态拦截规则：基于与数据表的统计信息、元数据信息等内容有关的规则进行拦截或提示。
- 运行熔断规则：基于SQL语句运行时的系统动态信息（如CPU、内存、IO等）的规则进行阻断。
对于静态拦截规则、动态拦截规则，系统在SQL请求满足条件时，可对该请求进行中止或者提示处理。对于运行熔断规则，系统在SQL请求满足条件时，会阻断该SQL任务。
#### SQL防御规则与约束
- SQL防御规则可以同时关联多个SQL引擎，且每个服务可以配置不同的触发阈值参数。
- SQL防御规则按照租户进行配置，同一条规则支持关联多个租户，防御规则只对规则所关联租户对应的SQL请求生效。
 
