为什么DBeaver/JDBC可连接ClickHouse,HTTP接口却提示鉴权失败?
ClickHouse JDBC驱动底层逻辑
官方提供的ClickHouse JDBC驱动确实基于HTTP协议实现,与8123端口的原生HTTP接口共用同一套服务端监听逻辑,核心交互流程如下:
- 连接建立时,驱动会自动读取配置里的用户名、密码、默认数据库、超时等参数
- 认证默认采用HTTP Basic Auth的方式传递账号密码,同时会对特殊字符自动做URL编码处理
- 执行查询时,驱动会将SQL拼接为符合HTTP接口要求的请求格式,自动补全
wait_end_of_query、session_id等通用参数 - 结果返回后驱动会按JDBC规范将二进制/文本返回值解析为ResultSet对象
正确的CURL请求写法
你遇到的516认证错误,绝大多数是因为密码含特殊字符未编码、或者误用URL参数传递认证信息导致,优先使用与JDBC逻辑一致的Basic Auth方式发起请求:
- 基础连通性测试
curl -u 你的实际用户名:你的实际密码 'http://host:8123/'
请求成功会返回Ok.的响应内容。
- 带查询测试(验证完整功能)
curl -u 你的实际用户名:你的实际密码 'http://host:8123/?database=你的默认数据库名' --data 'SELECT version()'
如果你的ClickHouse服务开启了HTTPS,将URL前缀替换为https://即可。
- 若必须用URL参数传递认证信息,需要先将用户名、密码做URL编码,再填入参数:
# 例如密码为aBc&123@,编码后为aBc%26123%40 curl 'http://host:8123/?user=编码后的用户名&password=编码后的密码'
内容的提问来源于stack exchange,提问作者Matthew Thomas
相关产品推荐
相关产品推荐

