更新时间:2024-11-29 GMT+08:00

添加SQL防御规则

操作场景

用户可以在Manager界面对指定的租户及SQL引擎添加SQL防御规则,系统会对触发规则的SQL请求进行提示、拦截或阻断操作。

为集群添加或者修改SQL防御规则时需结合业务场景进行规则是否开启以及对应规则阈值是否合理的评估,不合理的防御规则对相关SQL请求进行拦截或阻断后,可能会对上层业务造成影响。

添加SQL防御规则

  1. 使用具有Manager界面管理权限的用户登录FusionInsight Manager。
  2. 选择“集群 > SQL防御”,打开SQL防御页面。

    可以单击“查看所有支持规则”查看当前集群所有支持的SQL防御规则。

  3. 单击“添加规则”,验证当前用户密码后,打开添加规则页面。
  4. 配置相关参数后,单击“确定”。

    参数

    描述

    规则名称

    自定义SQL防御规则名称。

    规则ID

    选择规则ID。

    不同ID对应的防御规则含义信息可参考表1

    租户

    单击“添加”选择可适用当前防御规则的租户名称。

    如需新增租户,可参考租户资源进行集群租户的规划与创建。

    服务与动作

    单击“添加”指定当前SQL防御规则所关联的SQL引擎并配置规则的阈值参数。

    每条规则可以关联1个SQL引擎,如需针对其他SQL引擎继续配置,可以继续添加规则。

    • 服务:选择当前SQL防御规则所关联的SQL引擎。
    • SQL请求满足防御规则后,系统的处理操作有以下类型:
      • 提示:配置系统对SQL请求满足防御规则后,是否进行日志记录和提示处理。开启按钮时,如果当前规则有变量参数,需同时配置阈值。
      • 拦截:配置系统对SQL请求满足防御规则后,是否进行拦截处理。开启按钮时,如果当前规则有变量参数,需同时配置阈值。
      • 熔断:配置系统对SQL请求满足防御规则后,是否进行熔断处理。开启按钮时,如果当前规则有变量参数,需同时配置阈值。
        说明:

        对于规则类型为静态拦截、动态拦截的SQL防御规则,系统支持“提示”、“拦截”操作。对于规则类型为运行熔断的SQL防御规则,系统支持“熔断”操作。

  5. 规则添加成功后,可以在“SQL防御”界面查看已添加的防御规则。防御规则动态生效。

    如需对当前规则进行调整,可单击对应规则所在“操作”列的“修改”,验证用户密码后可修改规则相关参数。

    图1 查看SQL防御规则

MRS SQL防御规则

表1 MRS SQL防御规则

规则ID

规则描述

规则适用引擎

规则变量参数

SQL语句示例

static_0001

SQL中count(distinct)出现次数超限。

  • Hive
  • Spark
  • HetuEngine

count(distinct)出现次数阈值。

建议配置值:10

SELECT COUNT(DISTINCT deviceId), COUNT(DISTINCT collDeviceId)

FROM table

GROUP BY deviceName, collDeviceName, collCurrentVersion;

static_0002

SQL中是否使用了not in <subquery>语句。

  • Hive
  • Spark
  • HetuEngine

N/A

SELECT *

FROM Orders o

WHERE Orders.Order_ID not in (Select Order_ID

FROM HeldOrders h

where h.order_id = o.order_id);

static_0003

SQL中的join次数超限制。

  • Hive
  • Spark
  • HetuEngine

join次数阈值。

建议配置值:20

N/A

static_0004

SQL中的union all次数超限制。

  • Hive
  • Spark
  • HetuEngine

union all次数阈值。

建议配置值:20

select * from tables t1

union all select * from tables t2

union all select * from tables t3

union all select * from tables t4

union all select * from tables t5

union all select * from tables t6

union all select * from tables t7

union all select * from tables t8

union all select * from tables t9;

static_0005

子查询嵌套层数超限制。

  • Hive
  • Spark
  • HetuEngine

子查询的嵌套层数。

建议配置值:20

select * from (

with temp1 as (select * from tables)

select * from temp1);

static_0006

SQL语句字符串长度超限制。

  • Hive
  • Spark
  • HetuEngine

SQL字符串长度,单位为KB。

建议配置值:10

N/A

static_0007

多表关联时存在笛卡尔积。

  • Hive
  • Spark
  • HetuEngine

N/A

select * from A,B;

static_0008

在集群级别(on cluster)执行alter table update操作。

ClickHouse

N/A

alter table testtb1 on cluster default_cluster update price=10.0 where id='100'

static_0009

在集群级别(on cluster)执行alter table delete 操作。

ClickHouse

N/A

alter table testtb1 on cluster default_cluster delete where id ='10'

static_0010

在集群级别(on cluster)执行alter table add column操作。

ClickHouse

N/A

alter table testtb1 on cluster default_cluster add column testc String

static_0011

在集群级别(on cluster)执行alter table drop column操作。

ClickHouse

N/A

alter table testtb1 on cluster default_cluster drop column testc

static_0012

在集群级别(on cluster)执行optimize final操作。

ClickHouse

N/A

optimize table testtb1 on cluster default_cluster final

static_0013

在集群级别(on cluster)执行drop类操作。

ClickHouse

N/A

drop table/database test on cluster default_cluster;

static_0014

在集群级别(on cluster)执行truncate table操作。

ClickHouse

N/A

truncate table testtb1 on cluster default_cluster;

dynamic_0001

扫描文件数超限制。

  • Hive
  • Spark
  • HetuEngine

计划/已经扫描的文件数量阈值。

建议配置值:100000

SELECT ss_ticket_number FROM store_sales WHERE ss_ticket_number=72291252 LIMIT 10;

dynamic_0002

对单个表操作(select,delete,update,alter)涉及的分区数超限制

  • Hive
  • Spark
  • HetuEngine
  • ClickHouse

delete或alter操作涉及的分区数量阈值。

建议配置值:10000

DELETE FROM table_name WHERE column_name = value

dynamic_0003

join的右表为分布式表时,右表的数据量超限制。

ClickHouse

执行join操作时,右表的行数阈值。

建议配置值:100000000

SELECT name, text FROM table_1 JOIN table_2 ON table_1.Id = table_2.Id

running_0001

Select类型的SQL语句向客户端返回的结果行数超限制。

  • Hive
  • Spark
  • HetuEngine
  • ClickHouse

查询返回结果的行数阈值。

建议配置值:100000

select * from table

running_0002

SQL的占用内存峰值超绝对值限制。

  • Hive
  • Spark
  • HetuEngine
  • ClickHouse

SQL运行占用内存阈值,单位为MB。

N/A

running_0003

SQL已经运行的时长超限制。

  • Hive
  • Spark
  • HetuEngine
  • ClickHouse

SQL运行时长阈值,单位为秒。

N/A

running_0004

SQL已经发生的数据扫描量。

  • Hive
  • Spark
  • HetuEngine
  • ClickHouse

SQL扫描数据量,单位为GB。

建议配置值:10240

N/A