Navicat Cloud 无法设置数据库级只读权限,真正的只读需在MySQL中执行GRANT SELECT ON mydb.* TO 'user'@'%';——Cloud仅控制项目内连接/查询的可见与编辑权限,不干预数据库实际操作权限。
Navicat Cloud 里怎么给成员设「只读某个数据库」的权限
navicat cloud 本身不支持数据库级、表级或 sql 操作级的细粒度权限控制——它只管「谁能看到这个连接/查询/模型」,不管「谁能对这张表执行 update」。真正的数据操作权限,始终由后端数据库(mysql/postgresql 等)自身 rbac 机制决定。
所以你看到的「项目成员权限」,其实是 Navicat Cloud 的协作视图权限,不是数据库权限。常见错误是:把成员设为 Viewer,结果对方在本地 Navicat 里双击连接、照样能写 SQL、删数据——因为 Viewer 只禁止编辑项目内保存的 Query 或 Model,不干涉连接本身的使用。
- 想限制实际数据操作,必须在 MySQL 里用
GRANT SELECT ON mydb.users TO 'user1'@'%'显式授权 - Navicat Cloud 的
Editor角色,仅允许修改该项目下的Connection配置、Query内容、Data Model结构,不影响连上去之后的行为 - 如果你共享的是一个已存连接,且该连接配置了高权限账号(如
root),那无论 Cloud 上设什么角色,成员只要能连上,就拥有该账号全部数据库权限
共享连接时,为什么成员看不到某些数据库或表
这不是 Navicat Cloud 权限问题,而是连接所用账号在目标数据库里的 SHOW DATABASES 权限或库/表级 SELECT 授权缺失导致的。Navicat 连接后默认调用 SHOW DATABASES 和 SHOW TABLES 获取列表,如果账号没权限,就显示为空。
- MySQL 中检查:登录后执行
SHOW GRANTS FOR CURRENT_USER,确认是否有USAGE以外的显式授权 - PostgreSQL 中注意:用户需有
CONNECT权限到对应 database,且 schema(如public)需有USAGE,表还需SELECT - Navicat Cloud 不缓存或过滤这些元数据——它只是把客户端拿到的结果原样展示
怎样避免成员误改生产连接配置
Navicat Cloud 共享连接本质是同步 JSON 配置,包括主机、端口、用户名、密码(若勾选了「保存密码」)。一旦被 Editor 修改并同步,所有成员下次打开都会加载新配置——可能指向测试库、甚至删错 host。
- 敏感连接(尤其是生产环境)建议设为
Viewer,但更稳妥的是:不共享连接,只共享Query或导出.sql文件 - 若必须共享连接,提前在连接属性中取消勾选
Save password,防止密码被同步泄露 - 团队内部约定命名规范,比如在连接名末尾加
[PROD]或[RO],靠视觉提醒而非权限拦截
Navicat Cloud 同步失败提示 Permission denied: You don't have permission to access this project
这通常不是网络或登录问题,而是项目归属关系变更后未刷新本地缓存。比如项目原属 A 用户,A 转让给 B,但你的 Navicat 客户端仍缓存着旧的项目 ID 和访问 token。
- 先退出 Navicat,删除本地缓存目录:
~/Library/Application Support/PremiumSoft CyberTech/Navicat/Cloud(macOS)或%APPDATA%\PremiumSoft CyberTech\Navicat\Cloud(Windows) - 重新登录,手动从 Cloud 项目列表中重新「加入」该项目(不要点旧书签)
- 检查项目右上角显示的 Owner 是否为你预期的账户;转让后旧 Owner 的本地客户端不会自动降权,需主动退出重进
细粒度权限这件事,本质上是两层:Navicat Cloud 管「看到什么」,数据库自己管「能做什么」。混淆这两者,是绝大多数权限设置失效的根源。










