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

配置ClickHouse SQL防御

操作场景

用户可以在Manager界面配置ClickHouse的SQL防御规则,根据业务调整对应SQL防御规则的参数。

前提条件

  • 已安装包含ClickHouse服务的集群客户端,例如安装目录为“/opt/hadoopclient”。
  • ClickHouse逻辑集群运行状态正常。
  • 对于开启了Kerberos认证的集群,需要创建具有ClickHouse表操作权限的业务用户,例如创建人机用户“clickhouseuser”。
  • 已创建关联了ClickHouse服务的租户,并与ClickHouse业务用户关联。

使用约束

  • 防御规则默认动态生效时间为1分钟。
  • 拦截和熔断规则会中断SQL查询,请根据实际业务配置合理的值。
  • ClickHouse相关规则配置后,需要重新登录客户端生效。

操作步骤

  1. 登录FusionInsight Manager,选择“集群 > SQL防御”,打开SQL防御页面。
  2. 参考添加SQL防御规则添加针对ClickHouse的SQL防御规则。

    ClickHouse SQL引擎支持的各类型SQL防御规则可参考MRS SQL防御规则

    例如添加一条规则ID为“static_0008”,SQL语句执行ClickHouse集群级别的表更新操作就进行“提示”的规则。

    图1 添加ClickHouse SQL防御规则

  3. 登录安装有ClickHouse客户端的节点,执行以下命令,切换到客户端安装目录。

    cd /opt/hadoopclient

    执行以下命令,配置环境变量。

    source bigdata_env

  4. 如果当前集群为安全模式(启用Kerberos认证),执行以下命令认证当前用户,当前用户需要具有创建ClickHouse表的权限。如果当前集群为普通模式(未启用Kerberos认证),则无需执行本步骤。

    kinit 组件业务用户

    例如,kinit clickhouseuser。

  5. 使用ClickHouse客户端连接到ClickHouse服务端。

    安全模式:

    clickhouse client --host ClickHouseServer的实例IP --port 9440 --secure

    普通模式:

    clickhouse client --host ClickHouseServer的实例IP --user 用户名 --password --port 9000

    输入用户密码

  6. 执行以下命令,创建数据表。

    CREATE DATABASE cktest ON CLUSTER default_cluster;

    CREATE TABLE cktest.test2 ON CLUSTER default_cluster ( `EventDate` DateTime, `CounterID` UInt32, `UserID` UInt32, `ver` UInt16 ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/cktest/test2', '{replica}') PARTITION BY toYYYYMM(EventDate) ORDER BY (EventDate, intHash32(UserID));

    CREATE TABLE cktest.test2_dir ON CLUSTER default_cluster as cktest.test2 ENGINE = Distributed(default_cluster, cktest, test2, rand());

  7. 执行以下命令向表中插入数据。

    insert into cktest.test2 values('2023-08-01',111,111,111);

    insert into cktest.test2 values('2023-08-02',222,111,111);

  8. 针对已经创建的表,执行以下SQL语句,检查当前SQL防御规则是否生效。

    alter table cktest.test2 on cluster default_cluster update CounterID = toUInt32(222) where EventDate='2023-08-01' ;

    ...
    <Warning> SQLDefender: Distributed DDL ALTER UPDATE queries are undesirable.
    ...

    如果防御规则设置的是拦截,则命令执行失败,系统回显信息如下:

    ...
    DB::Exception: Distributed DDL ALTER TABLE UPDATE queries are undesirable..(QUERY_IS_PROHIBITED)
    ...

    更多ClickHouse SQL防御规则可参考MRS SQL防御规则