ClickHouse云实例白名单不生效,主因是协议与端口不匹配、IP填写错误或权限配置遗漏;需确认端口(9000/8123)、选用对应驱动(ClickHouse/HTTP)、填公网出口IP、检查用户启用状态及数据库授权。
ClickHouse 云实例白名单不生效?先确认端口和协议
navicat 默认用 mysql 协议连接 clickhouse,但多数云厂商(如阿里云、腾讯云、bytehouse)的 clickhouse 实例默认只开放 9000(原生 tcp)或 8123(http)端口,且**不支持 mysql 协议**。直接填 3306 或勾选 “mysql” 驱动必然失败。
- 查清你用的云服务实际开放的是哪个端口:阿里云 CK 实例控制台 → 网络与安全 → 白名单 → 查看“连接地址”末尾端口号;ByteHouse 控制台明确标注
9000(Native)或8123(HTTP) - Navicat 必须选对驱动:Native 连接用
ClickHouse驱动(Navicat 16+ 内置),HTTP 连接用HTTP驱动(需手动启用并填http://地址) - 白名单填的是客户端出口 IP,不是 Navicat 所在机器的局域网 IP;若在公司内网或使用代理,得填公网出口 IP(可用
curl ifconfig.me确认)
Navicat 新建连接时填错哪些字段会导致“Connection refused”
错误常集中在认证信息和协议匹配上,不是密码错了,而是根本没走到鉴权那步。
-
Host填的是内网地址(如ck-xxxxx-private.clickhouse.aliyuncs.com)——云厂商白名单只对公网地址生效,私有网络地址无法从本地直连 -
Port填了9000却选了MySQL驱动——协议不兼容,服务端直接拒绝,日志里看不到有效错误 -
Username写成default但云实例已禁用该用户(如腾讯云 CK 默认只开admin),或密码含特殊字符未 URL 编码(HTTP 模式下尤其敏感) - 勾选了
SSL但云实例未启用 HTTPS(8443)或未提供可信 CA,连接会卡在 TLS 握手阶段
HTTP 模式 vs Native 模式:选哪个更稳?
Native 模式(9000)性能高、支持更多语法,但云环境常被防火墙拦截;HTTP 模式(8123)穿透性好、兼容性强,是多数云实例的推荐连接方式。
- Native 模式需确保安全组/防火墙放行
9000,且 Navicat 版本 ≥ 16.1(旧版驱动不稳定) - HTTP 模式连接字符串格式必须是
http://<host>:8123</host>,不能漏http://前缀,否则 Navicat 会当成 Native 尝试 - HTTP 模式下
Database字段要显式填,空值会导致查询报错DB::Exception: Database not specified - 部分云厂商(如火山引擎 ByteHouse)要求 HTTP 请求带
X-ClickHouse-User头,Navicat 不支持自定义 header,此时只能退回到 Native 模式或换 DBeaver
白名单加了还是连不上?检查这三处冷门配置
云平台控制台的“白名单”只是第一道门,后面还有实例级和用户级权限控制,容易被忽略。
- 阿里云 CK 控制台中,“账号管理”页需确认目标用户状态为“启用”,且“授权数据库”已分配读写权限(仅添加白名单不等于授权)
- 腾讯云 CK 的“网络与安全”里有两个白名单列表:一个是“公网白名单”,另一个是“VPC 白名单”——即使你走公网,也可能被误加到 VPC 列表里,无效
- ByteHouse 实例创建时若选了“最小权限模板”,则
default用户被禁用,且新用户默认无system库查询权限,Navicat 连接后执行SELECT 1都可能因元数据查询失败而报错Not found table system.one
最麻烦的其实是云厂商文档里没明说的隐式限制:比如某些 region 的 CK 实例强制要求开启 SSL,或者 HTTP 模式下必须传 database 参数才能建立会话。这些细节不翻控制台的具体提示或抓包看响应头,很难定位。

















