更新时间:2026-08-29 GMT+08:00
分享

使用ClickHouse UDF安全沙箱

场景介绍

ClickHouse支持用户通过UDF的方式,实现自定义函数功能。此功能存在第三方恶意攻击和越权的风险,因此增加安全沙箱的功能,限制UDF的运行权限范围。

ClickHouse支持Python、Java等多种语言实现UDF,本特性仅支持Java UDF安全沙箱。

本章节适用于MRS 3.3.1及之后版本。

前提条件

准备UDF文件,例如“test.jar”。

配置ClickHouse UDF

  1. 使用WinSCP工具以omm用户将用户的UDF文件上传至ClickHouse节点,例如上传至“/home/omm”目录下。
  2. 执行以下命令上传用户的UDF文件。

    cp /home/omm/test.jar /srv/BigData/clickhouse/data1/metadata/user_scripts

  3. 执行以下命令修改用户UDF文件的权限。

    chmod 550 /srv/BigData/clickhouse/data1/metadata/user_scripts/test.jar

    chown omm:wheel /srv/BigData/clickhouse/data1/metadata/user_scripts/test.jar

    所有的ClickHouse节点都执行13

  4. 登录FusionInsight Manager界面,选择“集群 > 服务 > ClickHouse > 配置”,通过“clickhouse-udf-customize”配置用户UDF函数。配置参数如下:

    参数名

    描述

    function[1].name

    定义外部函数的名称。

    function[1].type

    定义外部函数的类型,此处为executable,表示此函数由一个可执行文件实现。

    function[1].return_type

    定义外部函数的返回类型,例如字符串类型String。

    function[1].argument[1].type

    定义参数的类型,例如字符串类型String。

    function[1].argument[1].name

    定义参数的名称。

    function[1].format

    定义返回结果的格式,此处为TabSeparated,表示以制表符为分隔符的文本格式。

    function[1].execute_direct

    当配置为Java UDF时配置为0,其他配置为1。

    function[1].command

    定义该外部函数对应的命令。当配置为Java UDF时填写文件名称,例如:test.jar。

  5. 配置完成后,单击“保存”,保存配置。

关闭ClickHouse UDF安全沙箱

登录FusionInsight Manager界面,选择“集群 > 服务 > ClickHouse > 配置 > 全部配置 > 用户自定义函数”,修改“_udf_sandbox”参数为“none”,保存配置。

配置ClickHouse UDF安全沙箱白名单

当用户使用Java制作的UDF时,默认开启安全沙箱功能。如果用户的一个或者多个Java UDF需要关闭安全沙箱功能,则可将对应的UDF文件名称配置在白名单中。

登录FusionInsight Manager界面,选择“集群 > 服务 > ClickHouse > 配置 > 全部配置 > 用户自定义函数”,修改“_sandbox_white_list”,多个UDF文件用逗号隔开,保存配置。

例如:test1.jar,test2.jar,test3.jar,如下图所示:

配置UDF运行JDK版本

ClickHouse支持指定UDF运行的JDK版本,默认为JDK8,还支持指定为JDK17或者JDK21。

  1. 登录Manager界面,选择“集群 > 服务”,在服务列表中单击“ClickHouse”进入概览页面,选择“ 配置 > 全部配置”。
  2. 在全部配置页面,选择“ClickHouseServer(角色) > 用户自定义函数”,参数“udf_jdk_version”的值为对应的JDK版本。修改该参数值即可修改ClickHouse UDF运行的JDK版本。

    图1 修改JDK版本

  3. 单击“保存”保存配置。

相关文档