Atlas项目角色管UI操作权限,数据库角色管连接后的数据操作权限;二者完全解耦,项目Owner不自动获得数据库访问权,需单独分配数据库角色。

Atlas 项目角色和数据库角色解决的是完全不同的权限层级问题:前者管你在 Atlas 控制台里能「看到什么、操作什么项目」,后者管你用连接字符串连上某个数据库后「能读写哪些集合、执行哪些命令」。
项目角色决定你在 Atlas UI 中的操作边界
项目角色(如 Project Owner、Project Read Only)只在 Atlas 管理界面生效,不传递到数据库内部。它控制你能否创建集群、修改网络访问列表、查看监控图表、添加数据库用户等。
-
Project Owner可以添加/删除数据库用户,但不会自动给你dbadmin权限——你仍需显式为该用户分配数据库角色 -
Project Read Only用户在 UI 中看不到「Database Access」菜单,也无法进入「Collections」视图,哪怕他被赋予了readWriteAnyDatabase数据库角色 - 项目角色不继承、不叠加:即使你是
Project Owner,若未被授予任何数据库角色,用连接字符串连上数据库后默认无任何读写权限
数据库角色控制实际的数据库操作权限
数据库角色(如 readWrite、backup、atlasAdmin)是 MongoDB 原生 RBAC 的一部分,由 db.createUser() 或 Atlas UI 的「Database Access」页配置,作用于具体数据库或整个集群。
-
readWrite只对指定数据库生效;readWriteAnyDatabase才能跨库读写(但不能操作admin、local、config等受保护库) -
atlasAdmin是 Atlas 特有角色,允许执行setQuerySettings、reshardCollection等管理命令,但它不替代dbadmin对集合结构的操作权限 - 数据库角色必须绑定到具体用户名,且该用户必须已在 Atlas 中创建——仅设项目角色不会自动生成数据库用户
常见混淆点:为什么加了项目 Owner 还连不上数据库?
这是最常踩的坑:以为项目权限 = 数据库权限。实际上两者完全解耦。
- 现象:
Project Owner用户执行mongo "mongodb+srv://..."后报错not authorized on test to execute command { find: "users" } - 原因:该项目角色没给任何数据库角色,连接字符串里的用户(比如
myapp)在数据库层面没有被授予权限 - 解决:进 Atlas → 项目 → 「Database Access」→ 添加用户
myapp→ 分配readWrite到test数据库,或readWriteAnyDatabase(谨慎) - 注意:
atlasAdmin不等于root,它不能执行createUser或dropDatabase,这些仍需userAdminAnyDatabase或自定义角色
真正容易被忽略的是权限生效时机:数据库角色变更后,已有连接不会自动刷新权限,必须重连或等待连接池重建;而项目角色变更在 UI 中几乎是实时的。

















