Navicat本身不拦截SQL执行,只读权限必须在MySQL或PostgreSQL数据库层配置;在Navicat中设置表级SELECT权限需展开数据库逐表勾选、禁用其他操作权限、精确配置主机地址,并执行FLUSH PRIVILEGES刷新。
只读权限必须在数据库层配置,Navicat本身不拦截SQL执行
navicat team 的「viewer」角色只限制编辑连接、查询文件或模型,不阻止用户手写并执行 delete 或 update。如果你在 navicat 里把成员设为 viewer,但他连接时用的是 root 账号,照样能删库。真正起作用的,永远是 mysql 或 postgresql 里那个账号的实际权限。
用 Navicat 图形界面配表级 SELECT 权限时的三个关键动作
Navicat 15+ 的「新建用户」向导支持细粒度授权,但默认容易选错范围:
- 在「权限」Tab 下点击「添加权限」,不要直接勾选数据库图标,必须展开库、再逐个勾选目标表(如
orders、customers) - 每个表只勾选
SELECT,确保INSERT、UPDATE、DELETE、DROP全部未选中 - 检查「主机」字段:填
%是高危操作;应填合作方固定出口 IP(如203.0.113.45)或 CIDR 段(如203.0.113.0/24)
配完权限后必须手动刷新,否则不生效
Navicat 执行完 GRANT 后,MySQL 权限缓存不会自动更新:
- 打开任意查询窗口,手动执行
FLUSH PRIVILEGES - 如果用的是 MySQL 8.0.23+,部分场景可省略,但生产环境建议统一执行,避免版本差异导致权限延迟
- 测试前,务必用新账号重新建连接——旧连接会复用已缓存的权限状态
PostgreSQL 用户额外注意 schema 权限
即使给了 SELECT 权限,PostgreSQL 还需两步才可见表:
- 用户必须有目标 database 的
CONNECT权限 - 对应 schema(通常是
public)必须授予USAGE权限,否则SHOW TABLES或 Navicat 左侧树状列表为空 - 命令示例:
GRANT USAGE ON SCHEMA public TO readonly_user


















