navicat on-prem server 不支持按ip限制项目访问,其角色权限仅控制页面内操作(如编辑、删除文件),不校验客户端来源ip;需在上游通过nginx的allow/deny、防火墙或云厂商acl实现ip白名单控制。

Navicat On-Prem Server 本身不提供「按 IP 限制团队项目访问」的功能 —— 它不校验客户端来源 IP 是否在白名单内,所有能连上 Web 端(http://your-server:3030)的用户,只要通过身份认证,就能按角色看到对应项目。真要实现“只允许特定 IP 访问团队项目”,必须在它上游加一层网络或代理控制。
为什么 Navicat On-Prem Server 的角色权限不拦 IP?
它的 Viewer / Editor 角色只管你在 Web 页面里能不能点开、编辑、删除某个 .sql 文件或连接配置,不管你是从北京机房还是东京咖啡馆连进来的。登录成功后,后续所有请求都走 session 或 token 认证,服务端根本不会检查 Remote-Addr 或转发头里的原始 IP。
这和数据库账号的 'user'@'192.168.5.100' 是两回事:后者由 MySQL 自己做连接层鉴权;前者是应用层协作系统,没设计这个能力。
实际可行的三层拦截方案
想让只有 203.0.113.45 和 203.0.113.46 能打开项目页面,得组合使用:
- Web 服务器反向代理(如 Nginx):在
location /下加allow 203.0.113.45;+allow 203.0.113.46;+deny all;,这是最直接有效的入口过滤 - 防火墙(如 iptables / Windows 防火墙):只放行指定 IP 对
3030端口的 TCP 连接,适合内网部署场景 - 如果用了云负载均衡(如阿里云 SLB、AWS ALB):在监听规则里配置访问控制策略(ACL),比改服务器配置更灵活,也避免暴露真实端口
注意:Navicat On-Prem Server 默认绑定 0.0.0.0:3030,意味着它监听所有网卡 —— 如果你没配任何外部防护,等于整个互联网都能尝试登录。
别误用「连接配置里的主机字段」来挡 IP
有人会翻到 Navicat 桌面端的连接设置,把「主机」填成 203.0.113.45,以为这样就能限制访问。这是错的:主机 字段指的是数据库服务器地址,不是客户端来源 IP。填这里对 On-Prem Server 的 Web 访问完全无效。
真正要控客户端 IP,唯一位置是:
- Nginx 的
allow/deny - 系统防火墙规则
- 云厂商的网络 ACL 或安全组
且必须作用于 3030(或你自定义的 Web 端口),而不是数据库端口(如 3306)。
最容易被忽略的一点:Navicat On-Prem Server 的日志(/var/log/navicat-onprem/ 或 Windows 对应目录)里不记录原始客户端 IP,只记代理传过来的 X-Forwarded-For —— 如果你用 Nginx 反代但没配 proxy_set_header X-Forwarded-For $remote_addr;,活动日志里的 IP 就全是 127.0.0.1,查不到谁从哪来连的。











