ClickHouse v23.7.3.14-stable 补丁版本深度解析:Named Collections、SHOW CREATE 密码泄漏与 Zstd 写缓冲截断修复
ClickHouse v23.7.3.14-stable 补丁版本深度解析Named Collections、SHOW CREATE 密码泄漏与 Zstd 写缓冲截断修复【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse本篇文章以 ClickHouse 官方发布说明 docs/changelogs/archive/v23.7.3.14-stable.md 为主线深入剖析该补丁版本相对 v23.7.2.25-stable 的每一项变更并结合当前仓库源码与测试用例讲清每个 Bug 的成因、修复思路与验证方法。读完本文你将理解 ClickHouse 补丁版本patch release的发布结构、Named Collections 在集群上的工作机制、SHOW CREATE 语句的密钥脱敏原理以及 zstd 流式压缩缓冲区的内部实现。版本概览补丁版本的发布形态v23.7.3.14-stable 是 ClickHouse 2023 年 7 月稳定分支23.7上的一个补丁发布基线为 v23.7.2.25-stablecommit8dd1107b032本次构建提交为bd9a510550c。发布说明中的FIXME是 changelog 生成工具的占位标记表示该条目在发布流程中需要被人工确认或替换属于 ClickHouse 发布脚本的常规痕迹并非技术内容。整个发布包含三类条目Build/Testing/Packaging Improvement构建/测试/打包改进1 条涉及 Docker 镜像构建Bug Fix用户可见行为修复3 条涉及 Named Collections、SHOW CREATE 密码泄漏、zstd 压缩写缓冲NOT FOR CHANGELOG / INSIGNIFICANT不对外发布 / 次要修复2 条涉及 DISTINCT 崩溃与 Parquet 统计信息。其中Bug Fix条目是官方明确标记的用户可见的错误行为修复是本次补丁的核心价值所在。下面逐条展开。修复一集群上的 Named Collections 问题#52687背景什么是 Named CollectionsNamed Collections命名集合是 ClickHouse 用于集中管理外部系统连接凭据与参数的机制。它把连接 Kafka、S3、MySQL、远程表函数等场景所需的地址、端口、用户名、密码等参数以命名集合的方式存储用户在使用表函数或数据源时只需引用集合名避免在每条 SQL 中重复书写敏感信息。从源码结构看Named Collections 的实现集中在 src/Common/NamedCollections/ 目录下NamedCollections.cpp/NamedCollections.h集合核心对象提供get、getOrDefault、set、has、isOverridable等操作NamedCollectionsFactory.cpp集合的工厂与注册表NamedCollectionsMetadataStorage.cpp集合元数据的持久化存储Interpreters/InterpreterCreateNamedCollectionQuery.cpp等DDL 的执行解释器Parsers/ASTCreateNamedCollectionQuery.cpp等DDL 的语法树节点。集合内部通过Poco::Util::AbstractConfiguration承载键值对例如 src/Common/NamedCollections/NamedCollections.cpp 中Impl::create会把配置中的collection_path . key逐项复制进独立的集合配置对象。集合支持has(key)、getT(key)、getOrDefaultT(key, default)等类型化访问且每个键可标注是否允许被查询侧覆盖isOverridable。问题所在集群ON CLUSTER语义的修复本次修复的正是named collections on cluster——即通过ON CLUSTER在分布式集群上创建、修改、删除命名集合的行为。语法树的格式化实现可以印证这一能力src/Parsers/ASTCreateNamedCollectionQuery.cpp 中formatImpl依次输出CREATE NAMED COLLECTION [IF NOT EXISTS] name、formatOnCluster(...)以及AS key value列表。该修复PR #52687解决了 23.7 中ON CLUSTER场景下命名集合创建/变更未能正确同步到集群各节点的问题。命名集合在分布式部署中必须保证各节点元数据一致否则同一集合在不同节点上可能解析出不同的连接参数导致查询行为不一致。验证方式仓库中的无状态测试可复现集合的分布式行为tests/queries/0_stateless/02046_remote_table_function_named_collections.sql验证remote表函数与命名集合的配合tests/queries/0_stateless/02883_named_collections_override.sh验证集合参数被查询覆盖的语义tests/queries/0_stateless/03201_local_named_collections.sh验证本地非集群命名集合的隔离行为。修复二SHOW CREATE MYSQL TABLE 的密码泄漏#52962问题SQL 重写导致密钥外泄SHOW CREATE TABLE用于还原一张表的完整 DDL。当表使用 MySQL 数据库引擎ENGINE MySQL(...)时DDL 中会包含连接参数其中可能带有password。修复前的行为是SHOW CREATE直接输出了明文密码任何能执行该语句的用户都能借此获取数据库凭据属于安全漏洞。源码佐证密钥脱敏[HIDDEN]机制ClickHouse 在语法树格式化阶段对密钥字段做了统一脱敏。以命名集合的 DDL 输出为例src/Parsers/ASTCreateNamedCollectionQuery.cpp 中if (settings.show_secrets) ostr applyVisitor(FieldVisitorToString(), change.value); else ostr [HIDDEN];即只有显式开启show_secrets时才输出真实值否则一律以[HIDDEN]占位。MySQL 引擎的SHOW CREATE路径遵循同样的安全策略默认隐藏password等敏感字段仅在具备相应权限并显式要求时展示。PR #52962 正是把这一策略补全到SHOW CREATE MYSQL TABLE的生成逻辑中堵住泄漏通道。使用建议升级到包含该修复的版本23.7.3.14 及之后的补丁日常运维不要把SHOW CREATE的输出直接贴进日志或工单其中可能残留脱敏前的历史输出涉及外部引擎MySQL、PostgreSQL、Kafka、S3的凭据应尽量收敛到 Named Collections 中集中管理。修复三ZstdDeflatingWriteBuffer 偶发截断输出#53064问题现象ZstdDeflatingWriteBuffer是 ClickHouse 的 zstd 流式压缩写缓冲区负责把数据用 zstd 算法压缩后写入底层缓冲。修复前的版本在特定条件下会偶尔截断输出——即压缩写入的文件不完整末尾数据丢失表现为压缩文件大小异常或解压时报错。源码级成因分析从 src/IO/ZstdDeflatingWriteBuffer.cpp 的实现看压缩过程的核心是flush(ZSTD_EndDirective mode)size_t compression_result ZSTD_compressStream2(cctx.get(), output, input, mode); ... bool everything_was_compressed (input.pos input.size); bool everything_was_flushed compression_result 0; ended everything_was_compressed everything_was_flushed;循环只有在输入全部消费且压缩器输出已全部落盘compression_result 0表示 zstd 内部缓冲已清空时才结束。在流式边界如大输入被切分到多个输出块、ZSTD_e_flush与ZSTD_e_end切换处若结束条件判断不严谨就可能提前退出循环导致剩余压缩数据未写入底层缓冲最终输出被截断。PR #53064 修正了这类边界条件下的收尾逻辑确保ZSTD_e_end之后 zstd 的所有内部状态都被冲刷干净。缓冲区还暴露了另一个与本次修复相关的参数——window_logzstd 长距离匹配的窗口对数见 src/IO/ZstdDeflatingWriteBuffer.h。当window_log超出 zstd 支持范围时构造函数会抛出ILLEGAL_CODEC_PARAMETER相关行为在 tests/queries/0_stateless/04826_zstd_deflating_write_buffer_invalid_window_log.sh 中有专门验证。测试佐证tests/queries/0_stateless/04826_zstd_deflating_write_buffer_invalid_window_log.sh以INSERT INTO FUNCTION file(...) SETTINGS output_format_compression_zstd_window_log 1000触发非法窗口参数断言报错码ILLEGAL_CODEC_PARAMETERtests/queries/0_stateless/01622_codec_zstd_long.sqlzstd 编解码器的长数据回归测试tests/queries/0_stateless/02293_test_zstd_window_log_max.sh验证window_log上限行为。这些测试共同守护了 zstd 压缩路径的完整性防止截断类问题回归。非发布条目DISTINCT 崩溃与 Parquet 统计信息NOT FOR CHANGELOG / INSIGNIFICANT类别表示这些修复不会写入对外发布的 changelog通常用于内部质量改进但对稳定性同样重要Suspicious DISTINCT crashes#52636由 SQLancer数据库差分模糊测试工具在DISTINCT查询中发现的疑似崩溃。SQLancer 是 ClickHouse 长期使用的模糊测试体系之一这类由模糊测试驱动的修复体现了项目以自动化工具保障查询正确性的做法Fix Parquet stats for Float32 and Float64#53067修复 Parquet 格式中浮点列统计信息min/max的写入错误。此前 Float32/Float64 列的统计元数据可能不准确影响依赖 Parquet 文件统计信息做查询裁剪predicate pushdown的下游系统。构建/打包改进Docker 镜像与内联缓存#53008本次唯一的 Build/Testing/Packaging 条目与 Docker 镜像构建相关。背景是ClickHouse 的构建产物有时会携带内联缓存inline cache即构建期内联到二进制中的缓存数据打入 Docker 镜像后可能引发奇怪的副作用。由于该缓存并未被实际使用PR #53008 直接将其从打包流程中移除。这一改动印证了仓库 docker/server/ 与 docker/binary-builder/ 等打包目录的职责构建产出物需要经过裁剪与净化才能保证镜像体积与运行时行为的确定性。升级与验证建议升级路径v23.7.3.14-stable 是 23.7 分支的补丁版本官方发布渠道包括 deb/rpm 包与 Docker 镜像具体安装方式可参考 docker/server/ 与 packages/ 目录中的打包配置回归重点升级后建议重点验证三类场景——ON CLUSTER下的命名集合 DDL、外部引擎表的SHOW CREATE输出确认密码以[HIDDEN]脱敏、zstd 压缩的文件/HTTP 压缩输出完整性复现测试可直接运行仓库中的无状态测试如04826_zstd_deflating_write_buffer_invalid_window_log.sh验证 zstd 相关行为在当前环境的表现。小结v23.7.3.14-stable 是一个典型的补丁版本体量小、目标明确集中在三个用户可见的缺陷上——分布式命名集合的一致性、SHOW CREATE 的凭据泄漏、zstd 压缩输出的偶发截断。通过阅读源码可以看到这些修复背后是 ClickHouse 一贯的安全脱敏策略show_secrets开关、流式压缩的严格收尾语义以及 SQLancer 模糊测试驱动的质量保障体系。对于在生产环境使用 23.7 分支的用户该版本是一次值得跟进的稳定性与安全性更新。【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

如何让旧Mac安装最新macOS:OpenCore Legacy Patcher保姆级避坑指南

如何让旧Mac安装最新macOS:OpenCore Legacy Patcher保姆级避坑指南

如何让旧Mac安装最新macOS:OpenCore Legacy Patcher保姆级避坑指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你有一台 2015 年前后的 MacBo…

2026/11/11 14:06:57 阅读更多 →
Hindsight 监控指南:Prometheus 指标、健康探针与 OpenTelemetry 分布式追踪

Hindsight 监控指南:Prometheus 指标、健康探针与 OpenTelemetry 分布式追踪

Hindsight 监控指南:Prometheus 指标、健康探针与 OpenTelemetry 分布式追踪 【免费下载链接】hindsight Hindsight: Agent Memory That Learns 项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight Hindsight(Agent Memory Tha…

2026/11/11 14:06:57 阅读更多 →
AI与传统产品经理的核心差异与转型实践

AI与传统产品经理的核心差异与转型实践

1. AI产品经理与传统产品经理的核心差异在科技行业摸爬滚打这些年,我亲眼见证了AI技术对产品管理领域的重塑。2016年我刚转行做AI产品时,市面上甚至没有明确的"AI产品经理"这个岗位定义。如今这个角色不仅成为刚需,其工作方法论也与…

2026/10/24 11:02:09 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/10 23:32:01 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/10 23:32:03 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/11 2:31:33 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/10 16:14:15 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/10 12:51:50 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/10 23:32:10 阅读更多 →

日新闻

周新闻

月新闻