配置ClickHouse SQL防御规则
操作场景
用户可以在Manager界面配置ClickHouse的SQL防御规则,根据业务调整对应SQL防御规则的参数。
前提条件
- 已安装包含ClickHouse服务的集群客户端,例如安装目录为“/opt/hadoopclient”。
- ClickHouse逻辑集群运行状态正常。
- 对于开启了Kerberos认证的集群,需要创建具有ClickHouse表操作权限的业务用户,例如创建人机用户“clickhouseuser”。
- 已创建关联了ClickHouse服务的租户,并与ClickHouse业务用户关联,具体请参见添加MRS租户章节。
使用约束
- 防御规则默认动态生效时间为1分钟。
- 拦截和熔断规则会中断SQL查询,请根据实际业务配置合理的值。
- ClickHouse相关规则配置后,需要重新登录客户端生效。
操作步骤
- 登录FusionInsight Manager,选择“集群 > SQL防御”,打开SQL防御页面。
- 参考添加MRS SQL防御规则添加针对ClickHouse的SQL防御规则。
ClickHouse SQL引擎支持的各类型SQL防御规则可参考MRS SQL防御规则。
例如添加一条规则ID为“static_0008”,SQL语句执行ClickHouse集群级别的表更新操作就进行“提示”的规则。
图1 添加ClickHouse SQL防御规则 - 登录安装有ClickHouse客户端的节点,执行以下命令,切换到客户端安装目录。
cd /opt/hadoopclient
执行以下命令,配置环境变量。
source bigdata_env
- 如果当前集群为安全模式(启用Kerberos认证),执行以下命令认证当前用户,当前用户需要具有创建ClickHouse表的权限。如果当前集群为普通模式(未启用Kerberos认证),则无需执行本步骤。
kinit 组件业务用户
例如,kinit clickhouseuser。
- 使用ClickHouse客户端连接到ClickHouse服务端。
安全模式:
clickhouse client --host ClickHouseServer的实例IP --port 9440 --secure
普通模式:
clickhouse client --host ClickHouseServer的实例IP --user 用户名 --password --port 9000
输入用户密码
- 执行以下命令,创建数据表。
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());
- 执行以下命令向表中插入数据。
insert into cktest.test2 values('2023-08-01',111,111,111);
insert into cktest.test2 values('2023-08-02',222,111,111);
- 针对已经创建的表,执行以下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) ...