navicat 连接正常,mongo 命令行不带数据库名正常,但是后面加数据库名就失败了?
这是什么错误呢。谢谢
![]() | 1 dream4ever 2021-12-24 10:04:06 +08:00 |
![]() | 2 wjx0912 OP @dream4ever 和你网址的是一样的,只是把用户名换成-u 参数,结果也是 Authentication failed mongo.exe 是官方提供的命令,参数就一个 uri ,我是想知道为啥出错。。。 |
![]() | 3 wjx0912 OP 安装也是参考官网: docker run -d --restart=always --name mongo -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=tmp123456 mongo --auth |
![]() | 4 sujin190 2021-12-24 10:39:39 +08:00 不是 Authentication failed ,mongo 每个 db 好像授权单独设置的吧,不加 db 其实是有个默认值的,好像是 test 还是 local 来着,估计单独指 db 名的时候用对应 db 来做鉴权了吧 |
5 263 2021-12-24 10:46:19 +08:00 admin 不是超级管理员用户吧,修改 admin 为 roles: [ { role: "userAdminAnyDatabase", db: "admin" } ],或者给 nodebb 单独添加用户。 |
![]() | 6 wjx0912 OP @sujin190 确实是授权的问题,谢谢 mongo mongodb://admin:[email protected]:27017/nodebb --authenticationDatabase admin 能够成功 解决方法: 最粗暴的: db.createUser( { user: "admin", pwd: "tmp123456", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } ) 最好还是给每个数据库单独授权: use nodebb db.createUser({user:"nodebbuser",pwd:"nodebbpassword",roles:[{role:"dbOwner",db:"nodebb"}]}) |
![]() | 8 ipwx 2021-12-24 11:17:13 +08:00 MongoDB 的用户权限系统比较有趣,每个 DB 都有独立的用户账户,但是你可以授权 A 数据库的 user 能访问 B 数据库。所以 MongoDB 的连接串里面的数据库指的是“到底从哪个数据库里面查找你给的用户”。 |
![]() | 9 rbe 2021-12-24 11:56:34 +08:00 mongodb 的 uri 支持 authSource 参数的,不然他就会用你指定的这个 nodebb 数据库验证。 改成这样就可以了: mongo mongodb://admin:[email protected]:27017/nodebb?authSource=admin |
![]() | 10 rbe 2021-12-24 12:03:23 +08:00 @wjx0912 #6 另外你提的这个不是说“粗暴”,而是第一次创建用户就应该创建一个拥有超级权限的用户,否则后面不改配置重启的话,就不能创建其他用户了,参考文档: https://docs.mongodb.com/manual/core/localhost-exception/ |