我已经为我的mongo安装创建了一个管理员用户,如下所示:

> use admin
> db.addUser( { user: "test",
              pwd: "password",
              roles: [ "dbAdminAnyDatabse",
                        otherDBRoles:
                       {
                         "otherTestDB": [ "readWrite" ]
                       }]
                 } )

当我尝试使用“用户”:“test”和“WordPosid”:“RoopMango或Java驱动程序”时,我会收到一个错误的认证错误。
哪里出错了?

最佳答案

您已经为admin db创建了一个用户id,因此要使用该用户id,您必须连接到admin db,而不是othertestdb。otherdbroles文档控制以该用户身份连接到管理数据库时对其他数据库的访问。因此,对于您指定的adduser,以下命令将失败,因为该用户是admin db的用户,而不是othertestdb的用户:

$ mongo otherTestDB --username test --password password --eval 'printjson(db.c.findOne())'
connecting to: otherTestDB
Thu Feb 27 10:45:20.722 Error: 18 { code: 18, ok: 0.0, errmsg: "auth fails" } at src/mongo/shell/db.js:228

而下面的命令连接到管理数据库,然后通过getsiblingdb使用othertestdb,则成功:
$ mongo admin --username test --password password --eval 'printjson(db.getSiblingDB("otherTestDB").c.findOne())'
connecting to: admin
{ "_id" : ObjectId("530f5d904dbd43cfb46aab5b"), "hello" : "world" }

如果希望用户在使用该用户名和密码连接到othertestdb时能够进行身份验证,则需要将该用户单独添加到othertestdb。
这有用吗?

10-06 15:38