我已经为我的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。
这有用吗?