navicat cloud的viewer角色仅控制项目文件操作权限,无法阻止sql执行;真正只读必须依赖数据库账号的select授权+显式撤销insert/update/delete,并配合ip白名单与flush privileges。
navicat cloud 的「viewer」角色不能阻止成员执行 delete 或 update,真正起作用的是后端数据库账号权限。只在 cloud 里设 viewer,而数据库账号仍有写权限,删库照常发生。
Navicat Cloud 角色 ≠ 数据库权限
Cloud 项目里的 Viewer、Editor、Manager 是对 Navicat 本地项目文件(如 .navicat_project)的操作权限控制,不是对数据库的 SQL 权限拦截:
- Viewer 可以双击连接、打开查询窗口、手写并执行
DELETE FROM users—— 只要连接所用的数据库账号有 DELETE 权限 - Editor 能修改连接配置(比如把
host改成生产库地址),所有同步该项目的成员下次打开就会连错库 - Manager 拥有项目级管理权(如踢人、改角色),但依然无法限制某人用自己保存的密码连上数据库后跑
DROP TABLE
必须配两层权限才生效
想让团队“只能查不能删”,得同时做这两件事:
- 在 Navicat Cloud 项目中,把成员设为
Viewer(防止他们改连接、删模型) - 在 MySQL/PostgreSQL 中,为该成员使用的数据库账号单独授权:
GRANT SELECT ON mydb.report_log TO 'reporter'@'192.168.5.100',且明确不执行GRANT INSERT, UPDATE, DELETE - 确认 PostgreSQL 用户还有
CONNECT到对应 database 的权限,以及目标 schema(如public)的USAGE权限,否则SHOW TABLES会返回空
共享连接前务必剥离敏感配置
直接同步含密码的连接风险极高——即使加密存储,项目被导出为 .npz 后,SSH 隧道参数、内网地址、跳板机路径等元数据仍可被提取,构成攻击链路:
将用户讲稿一键生成乔布斯风极简科技感竖屏HTML演示稿。当用户需要生成PPT、演示文稿、Slides、幻灯片,或要求科技风/极简风/乔布斯风格的演示时触发此技能。输出为单个可直接运行的HTML文件。
- 新建空项目,用
Tools → Import Wizard → Structure Only导入表结构,不带连接、不带数据 - 右键项目树中的 Connection →
Delete Connection(不是禁用) - 关闭
File → Options → General → Auto-save connection passwords - 确保
Project Properties → Security → Password Protection为关闭状态
IP 白名单和细粒度授权是刚需
别用 'user'@'%' 授权,这是最常见也最危险的配置错误:
- MySQL 授权时,主机名填的是客户端来源 IP,不是数据库服务器 IP;应写成
'reporter'@'203.0.113.45'或 CIDR 段'reporter'@'203.0.113.0/24' - 云函数类场景(如 AWS Lambda)IP 不固定,需配合数据库白名单 + 应用层代理,不能妥协用
% - MySQL 8.0+ 支持列级权限,但语法严格:
GRANT SELECT(id, created_at) ON mydb.orders TO 'user'@'%'—— 漏括号或写成SELECT id, created_at会触发ERROR 1064 - 执行
GRANT后,部分 MySQL 版本需手动FLUSH PRIVILEGES,Navicat 查询窗口不会自动刷新权限缓存
最容易被忽略的点:Navicat Cloud 同步的是项目文件,不是数据库连接本身;权限失效往往不是因为 Cloud 设置错了,而是数据库账号没关写权限,或者忘了给 schema 加 USAGE。每次加人前,先查一遍 SHOW GRANTS FOR 'user'@'host',比反复调 Cloud 角色更管用。










