navicat 17 连接 redis 7.0 必须配置专用 acl 用户并显式授权 +client、+info、+keys、+scan 等权限,不能依赖默认用户;用户名和密码字段需分别填写 acl 用户名(如 navicat17)及对应密码,且服务端必须启用并正确加载 aclfile。

Navicat 17 连接 Redis 7.0 必须开启 ACL 支持
Redis 6.0 起默认启用 ACL(Access Control List),而 Redis 7.0 完全移除了 requirepass 这种全局密码模式。如果你用 Navicat 17 直接填密码连接却报 NOAUTH Authentication required 或 ERR invalid password,大概率是因为服务端没配 ACL 用户,或用户没权限执行 INFO / KEYS 等基础命令。
验证方式:在 Redis CLI 中运行 ACL LIST,若只看到 user default on nopass ~* &* +@all,说明用的是默认用户——但 Navicat 17 实际连接时会尝试用该用户执行 CLIENT SETNAME,而默认用户缺这个权限,就会静默失败。
- 必须为 Navicat 创建专用 ACL 用户,不能依赖
default - 用户需显式授予
+client、+info、+keys、+get、+scan等权限(Navicat 启动时会批量调用) - Redis 配置文件中必须启用
aclfile或至少加载了 ACL 规则(ACL LOAD)
创建 Navicat 专用 ACL 用户的最小权限集
在 Redis CLI 或 redis-cli -a your_admin_pass 中执行:
ACL SETUSER navicat17 on >mypass ~* &* +@read +@list +@set +@sortedset +@hash +@zset +client +info +keys +scan +ping +hello
这条命令创建用户 navicat17,密码 mypass,允许读所有 key(~*)、所有通道(&*),并覆盖 Navicat 17 实际需要的全部命令子集。注意以下几点:
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
-
+@read不包含+keys和+scan,必须显式加;否则 Navicat 打开“键列表”时空白无响应 -
+client是必须的,否则连接后立刻断开(Navicat 会发CLIENT SETNAME navicat_12345) - 不要用
+@all,它包含危险命令如+flushdb,Navicat 某些操作(如清空 DB)可能意外触发 - 执行完后务必运行
ACL SAVE持久化,否则重启 Redis 后失效
Navicat 17 连接配置关键项(Redis 7.0 专用)
打开 Navicat 17 → 新建连接 → 选择 “Redis” 类型。以下字段必须严格按 Redis 7.0 ACL 模式填写:
-
连接名:建议带版本和用途,如
redis7-acl-navicat -
主机名 / IP 地址:填实际地址,本地用
127.0.0.1,别用localhost(某些系统解析慢或走 IPv6) -
端口:默认
6379,若启用了哨兵则选 “Sentinel” 模式并填哨兵地址+端口 -
用户名:填 ACL 用户名,如
navicat17(不是default,也不是留空) -
密码:填对应 ACL 用户密码,如
mypass -
数据库:填数字,如
0;不支持填库名,Navicat 会自动识别当前 DB 的 key 数量
填完测试连接,成功后左侧“连接”面板会出现该实例,双击展开即可看到键列表。若仍连不上,检查 Redis 日志是否有 Client sent AUTH, but no password is set —— 这说明服务端根本没加载 ACL,不是客户端问题。
常见连接失败原因与快速排查路径
Navicat 17 对 Redis 7.0 的 ACL 支持是完整的,但失败往往卡在服务端配置或权限粒度上。最常踩的坑有这几个:
- Redis 配置里注释了
aclfile行,或aclfile路径不存在/不可读 → 导致ACL LOAD失败,ACL 不生效 - 用户权限里漏了
+ping→ Navicat 周期性心跳失败,连接显示“已断开” - 用了
~myapp:*这类受限 key pattern,但 Navicat 默认扫描*→ 键列表为空,误以为连不上 - Redis 启用了
protected-mode yes且没配bind或requirepass(旧习惯),导致外部连接被拒 - 防火墙或云服务器安全组未放行
6379端口(尤其远程连接时)
建议排查顺序:先用 redis-cli -u redis://navicat17:mypass@127.0.0.1:6379/0 命令行直连,能通再调 Navicat;命令行不通,问题一定在 Redis 服务端配置或网络层。










