V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐工具
RoboMongo
推荐书目
50 Tips and Tricks for MongoDB Developers
Related Blogs
Snail in a Turtleneck
wjx0912
V2EX  ›  MongoDB

请教 mongo 连接问题

  •  
  •   wjx0912 · 2021-12-24 09:54:27 +08:00 · 2543 次点击
    这是一个创建于 825 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    这是什么错误呢。谢谢

    11 条回复    2021-12-24 15:08:23 +08:00
    dream4ever
        1
    dream4ever  
       2021-12-24 10:04:06 +08:00
    wjx0912
        2
    wjx0912  
    OP
       2021-12-24 10:30:51 +08:00
    @dream4ever
    和你网址的是一样的,只是把用户名换成-u 参数,结果也是 Authentication failed

    mongo.exe 是官方提供的命令,参数就一个 uri ,我是想知道为啥出错。。。
    wjx0912
        3
    wjx0912  
    OP
       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
        4
    sujin190  
       2021-12-24 10:39:39 +08:00
    不是 Authentication failed ,mongo 每个 db 好像授权单独设置的吧,不加 db 其实是有个默认值的,好像是 test 还是 local 来着,估计单独指 db 名的时候用对应 db 来做鉴权了吧
    263
        5
    263  
       2021-12-24 10:46:19 +08:00
    admin 不是超级管理员用户吧,修改 admin 为 roles: [ { role: "userAdminAnyDatabase", db: "admin" } ],或者给 nodebb 单独添加用户。
    wjx0912
        6
    wjx0912  
    OP
       2021-12-24 10:48:38 +08:00
    @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"}]})
    wjx0912
        7
    wjx0912  
    OP
       2021-12-24 10:49:30 +08:00
    @263 刚搜索你说的。谢谢了
    ipwx
        8
    ipwx  
       2021-12-24 11:17:13 +08:00
    MongoDB 的用户权限系统比较有趣,每个 DB 都有独立的用户账户,但是你可以授权 A 数据库的 user 能访问 B 数据库。所以 MongoDB 的连接串里面的数据库指的是“到底从哪个数据库里面查找你给的用户”。
    rbe
        9
    rbe  
       2021-12-24 11:56:34 +08:00
    mongodb 的 uri 支持 authSource 参数的,不然他就会用你指定的这个 nodebb 数据库验证。
    改成这样就可以了:
    mongo mongodb://admin:[email protected]:27017/nodebb?authSource=admin
    rbe
        10
    rbe  
       2021-12-24 12:03:23 +08:00
    @wjx0912 #6
    另外你提的这个不是说“粗暴”,而是第一次创建用户就应该创建一个拥有超级权限的用户,否则后面不改配置重启的话,就不能创建其他用户了,参考文档: https://docs.mongodb.com/manual/core/localhost-exception/
    wjx0912
        11
    wjx0912  
    OP
       2021-12-24 15:08:23 +08:00
    @ipwx
    @rbe
    谢谢~~~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1583 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 16:58 · PVG 00:58 · LAX 09:58 · JFK 12:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.