请教 mongo 连接问题

2021-12-24 09:54:27 +08:00
 wjx0912

navicat 连接正常,mongo 命令行不带数据库名正常,但是后面加数据库名就失败了?

这是什么错误呢。谢谢

2584 次点击
所在节点    MongoDB
11 条回复
dream4ever
2021-12-24 10:04:06 +08:00
wjx0912
2021-12-24 10:30:51 +08:00
@dream4ever
和你网址的是一样的,只是把用户名换成-u 参数,结果也是 Authentication failed

mongo.exe 是官方提供的命令,参数就一个 uri ,我是想知道为啥出错。。。
wjx0912
2021-12-24 10:36:01 +08:00
安装也是参考官网:
docker run -d --restart=always --name mongo -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=tmp123456 mongo --auth
sujin190
2021-12-24 10:39:39 +08:00
不是 Authentication failed ,mongo 每个 db 好像授权单独设置的吧,不加 db 其实是有个默认值的,好像是 test 还是 local 来着,估计单独指 db 名的时候用对应 db 来做鉴权了吧
263
2021-12-24 10:46:19 +08:00
admin 不是超级管理员用户吧,修改 admin 为 roles: [ { role: "userAdminAnyDatabase", db: "admin" } ],或者给 nodebb 单独添加用户。
wjx0912
2021-12-24 10:48:38 +08:00
@sujin190
确实是授权的问题,谢谢

mongo mongodb://admin:tmp123456@192.168.0.192: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"}]})
wjx0912
2021-12-24 10:49:30 +08:00
@263 刚搜索你说的。谢谢了
ipwx
2021-12-24 11:17:13 +08:00
MongoDB 的用户权限系统比较有趣,每个 DB 都有独立的用户账户,但是你可以授权 A 数据库的 user 能访问 B 数据库。所以 MongoDB 的连接串里面的数据库指的是“到底从哪个数据库里面查找你给的用户”。
rbe
2021-12-24 11:56:34 +08:00
mongodb 的 uri 支持 authSource 参数的,不然他就会用你指定的这个 nodebb 数据库验证。
改成这样就可以了:
mongo mongodb://admin:tmp123456@192.168.0.192:27017/nodebb?authSource=admin
rbe
2021-12-24 12:03:23 +08:00
@wjx0912 #6
另外你提的这个不是说“粗暴”,而是第一次创建用户就应该创建一个拥有超级权限的用户,否则后面不改配置重启的话,就不能创建其他用户了,参考文档: https://docs.mongodb.com/manual/core/localhost-exception/
wjx0912
2021-12-24 15:08:23 +08:00
@ipwx
@rbe
谢谢~~~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/824143

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX