使用Mongoose和SRV连接字符串向MongoDB Atlas插入数据遇权限错误
解决MongoDB Atlas无法写入数据的权限问题
我来帮你搞定这个MongoDB Atlas的写入权限问题~你的错误提示MongoError: not authorized on admin to execute command已经明确指出:当前连接的用户没有权限在admin数据库执行写入操作。下面是具体的排查和解决步骤,全程用Atlas控制台操作更稳妥,别折腾shell创建root用户啦(当然特殊情况也会说明):
1. 先检查你的连接URI是否指定了正确数据库
你当前的连接可能默认落到了admin数据库,但你的users集合大概率不在这个库,或者用户根本没admin库的读写权限。仔细看一下你的连接URI:
如果你的业务集合在myapp数据库,URI应该写成这样:
mongodb+srv://<你的用户名>:<你的密码>@cluster0.mongodb.net/myapp?retryWrites=true&w=majority
注意末尾的myapp,这才是你要操作的目标数据库,而不是默认的admin。
2. 在Atlas控制台创建带正确权限的用户
Atlas的用户权限管理完全可以在控制台完成,比shell操作简单还不容易出错:
- 登录MongoDB Atlas控制台,进入你创建的集群页面
- 点击左侧菜单栏的Database Access选项
- 点击页面右上角的Add New Database User
- 权限选择这里,别直接选root(除非你真的需要最高权限,一般业务场景不推荐):
- 如果要操作所有数据库,选Built-in Role里的
readWriteAnyDatabase - 如果只操作特定数据库,选
readWrite,然后在下方指定对应的数据库名称(比如myapp)
- 如果要操作所有数据库,选Built-in Role里的
- 设置好用户名和密码后,点击Add User保存
3. 用新用户凭据重新连接测试
把连接URI里的用户名和密码替换成刚才创建的新用户的信息,然后重新尝试写入操作,应该就能成功了。
特殊情况:确实需要root角色怎么办?
如果因为某些特殊需求必须使用root权限,在创建用户时直接选择Built-in Role里的root即可,用这个用户的凭据连接后就能执行所有数据库操作。
另外,如果你用mongo shell连接时遇到问题,大概率是这两个原因:
- 没用对Atlas提供的官方连接命令:在集群页面点击Connect -> Connect with mongosh,复制生成的完整命令,替换用户名和密码后直接执行就行
- IP没被允许访问:点击左侧菜单栏的Network Access,添加你当前的IP地址(或者临时用
0.0.0.0/0允许所有IP访问测试,测试完记得改回来保证安全)
小提示:Atlas的权限是严格的“用户-数据库”绑定模式,一定要确保用户对目标数据库有对应的读写权限,默认创建的用户可能只有只读权限或者没指定正确的数据库哦~
内容的提问来源于stack exchange,提问作者danielv
相关产品推荐
相关产品推荐

