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/ |