Navicat 16 不管理数据库实际权限,仅控制客户端资源可见性与操作开关;真正权限由 MySQL/PostgreSQL 原生 GRANT 语句控制,Team 角色不影响数据库执行结果。

Navicat 16 本身不管理数据库实际权限,它只控制客户端内资源的可见性与操作开关;真正限制“能查什么表”“能不能删数据”的,必须靠 MySQL/PostgreSQL 原生的 GRANT 语句配置。
Navicat Team 角色 ≠ 数据库账号权限
你在 Navicat Team 里看到的 Viewer、Editor、Can manage,只决定成员能否在客户端界面里:看到连接、编辑 SQL 文件、导出结果集、增删项目成员。这些设置不会传给数据库,也不会影响 SELECT 或 DROP TABLE 的执行结果。
常见错误现象:
- 把某人设为
Viewer,但他本地连接配置填的是root账号——照样能删库 - 项目里开了
Execute权限,但成员双击运行 SQL 报Access denied for user 'xxx'@'%'——问题出在数据库账号没被授过SELECT,不是 Navicat 没配对 - 成员看不到某个库或表——大概率是数据库账号缺
SHOW DATABASES(MySQL)或CONNECT+USAGE ON SCHEMA(PostgreSQL)
想让开发只能查 orders 表的 id 和 created_at 字段?手写 GRANT
Navicat 的图形化权限面板(比如右键表 →「设置权限」)容易误配成数据库级授权,且不支持列级细粒度控制。正确路径是进「用户」→「权限」Tab,手动指定对象范围。
实操建议:
- 新建用户时,
Host别直接填%,优先用具体 IP 段如10.20.30.%,降低横向越权风险 - 在「权限」Tab 展开目标数据库,找到具体表(如
orders),只勾选对应行的SELECT;若需列级控制,必须关掉向导,切到SQL 预览标签页,确认生成的是形如GRANT SELECT(id, created_at) ON `mydb`.`orders` TO 'dev'@'10.20.30.%';的语句 - MySQL 8.0+ 用户注意认证插件:如果 Navicat 版本 ≤ v15,
caching_sha2_password可能导致权限不生效,创建用户时在「高级」Tab 改为mysql_native_password
导出结果失败?两个地方都要开权限
「导出结果集」按钮置灰,往往不是权限总开关没开,而是卡在两个隐性环节:
- 项目级开关:只有项目 Owner 能在
Project Settings → Permissions → Advanced Settings中开启Allow exporting result sets,该选项默认关闭 - Query 级权限:成员必须对具体 .sql 文件有
Execute权限,否则即使开了项目导出开关,也点不动按钮 - 导出行为始终以成员本地数据库账号身份执行——如果该账号没被授予对应表的
SELECT,导出时仍会报错,和 Navicat Team 设置无关
最常被忽略的一点:Navicat Team 权限变更后不会实时同步。成员必须重启 Navicat 客户端,或等待最长 15 分钟后台轮询更新,期间可能一直沿用旧权限状态。


















