无法从终端将MongoDB超级用户连接到其他数据库

时间:2013-12-12 12:23:58

标签: security mongodb privileges access-control

我在管理数据库中定义了superuser

$ mongo admin -u superuser -p 1234
MongoDB shell version: 2.4.6
connecting to: admin
> db.system.users.findOne()
{
    "_id" : ObjectId("52a9a8bd2db854b07d3960f1"),
    "user" : "superuser",
    "pwd" : "8c246ca972a74c8049b79771df9b718b",
    "roles" : [
        "userAdminAnyDatabase",
        "dbAdminAnyDatabase",
        "clusterAdmin",
        "readWriteAnyDatabase"
    ]
}

但现在我无法使用此用户连接到另一个数据库:

$ mongo mono -u superuser -p 1234
MongoDB shell version: 2.4.6
connecting to: mono
Thu Dec 12 13:22:42.100 Error: 18 { code: 18, ok: 0.0, errmsg: "auth fails" } at src/mongo/shell/db.js:228
exception: login failed

这是一个已知的功能/限制还是我做错了什么?

1 个答案:

答案 0 :(得分:4)

经过认证的mongo是一种皇室般的痛苦。即使您的超级用户基本上是无所不在的[“userAdminAnyDatabase”,“dbAdminAnyDatabase”,“clusterAdmin”,“readWriteAnyDatabase”],如果您按照{设置它',他的system.user帐户仍然位于“admin”数据库中{3}}。这意味着您必须首先登录“admin”,然后您可以“自行使用数据库”。

$ mongo mono -u superuser -p 1234 admin
MongoDB shell version: 2.4.6
connecting to: admin
myReplSet:PRIMARY> use mono

或者,我怀疑但是没有测试过您可以将超级用户放入“测试”数据库而不是“管理员”,这是shell默认放置的地方。这样可以让你从mongo命令行中删除“admin”,但现在你已经让你的用户在不同的地方维护了。岩石。硬地。