Navicat 15及更早版本不支持Redis 6+ ACL认证,因其仅发送单参数AUTH命令,而Redis 6+要求双参数AUTH username password,导致认证失败;必须升级至16.0.15+版本才能兼容ACL与TLS。
navicat 16 以下版本根本不支持 redis 6+ 的 acl 认证协议,不是配置问题,是底层协议握手就失败。旧版 navicat(如 15.x)发的是 auth password 命令,而 redis 6+ 默认启用 acl 后要求 auth username password —— 多一个参数,直接报 err wrong number of arguments for 'auth' command。
Redis 6+ 的 AUTH 命令格式变了,老客户端不兼容
Redis 在 6.0 引入 ACL 系统后,AUTH 命令语义升级:未指定用户名时默认用 default 用户,但命令结构仍为双参数。Navicat 15 及更早版本只认单参数形式,一发认证请求就被服务端拒绝。
- Redis CLI 连接示例(6.0+ 正确写法):
redis-cli -h redis.example.com -p 6379 -a "mypass"→ 实际走的是AUTH default "mypass" - Navicat 15 发出的却是
AUTH "mypass"→ Redis 返回错误,连接卡在认证阶段,后续所有操作(包括读数据)都不可达 - 即使你手动在 Navicat 的 Username 栏填了
default,旧版本也不会拼成合法命令,字段形同虚设
Navicat 16.0.15 是 TLS 和 ACL 兼容的分水岭版本
官方从 16.0.15 开始重写 Redis 协议栈,同时支持:
- 双参数
AUTH命令(适配 Redis 6+ ACL) - TLS 握手流程(需配合 Redis 的
tls-port和证书配置) - Cluster 模式下对
ASK/MOVED重定向的正确处理
低于该版本(哪怕只是 16.0.14),TLS 连接会直接触发 Connection reset by peer;ACL 认证则稳定复现 wrong number of arguments。
升级后仍连不上?重点检查这三个地方
升级只是前提,不是万能解。常见断点如下:
-
Connection Type必须选Redis (Standalone)或Redis (Cluster)—— 选Redis (Sentinel)会导致 SSL 开关灰掉、ACL 字段失效 - 密码含特殊字符(如
@、/)时,Navicat 16.2+ 虽已增强转义逻辑,但若连不上,可临时改纯数字密码测试是否为解析异常 - 云厂商实例(如腾讯云 Tendis)可能禁用
KEYS *,Navicat 自动刷新键列表会超时或报错;关闭设置里的「Auto-refresh keys list」可绕过
真正容易被忽略的是:Redis 启用 ACL 后,default 用户默认权限极低——它可能连 INFO 都没权限,更别说读键。升级 Navicat 只解决“发得出去”,不解决“服务端让不让看”。务必用 redis-cli --no-auth-warning -h x -p y -a z 登录后执行 ACL LIST 确认权限是否足够。


















