在启用身份验证的MongoDB中运行mongostat时出现问题

6

我刚刚为mongodb实现了认证,数据库‘admin’中有一个名为‘admin’的用户,数据库‘mydb’中有一个名为‘appadmin’的用户,一切运行良好。以下是我的数据库认证设置:

use admin
db.auth(‘’, ‘’)
db.getUsers()
[
    {
        "_id" : "admin.admin",
        "user" : "admin",
        "db" : "admin",
        "roles" : [
            {
                "role" : "userAdminAnyDatabase",
                "db" : "admin"
            },
            {
                "role" : "clusterMonitor",
                "db" : "admin"
            }
        ]
    }
]


use mydb
db.auth()
db.getUsers()

    {
        "_id" : "mydb.appadmin",
        "user" : "mydb",
        "db" : "mydb",
        "roles" : [
            {
                "role" : "readWrite",
                "db" : "mydb"
            },
            {
                "role" : "userAdmin",
                "db" : "mydb"
            }
        ]
    }
].

如果我运行以下代码,
mongostat --username=admin --password=mypassword  --authenticationDatabase=admin
insert query update delete getmore command flushes mapped  vsize   res faults qr|qw ar|aw netIn netOut conn     time
    *0    *0     *0     *0       0     1|0       0 240.0M 678.0M 91.0M      0   0|0   0|0   79b    10k    1 11:49:18
    *0    *0     *0     *0       0     1|0       0 240.0M 678.0M 91.0M      0   0|0   0|0   79b    10k    1 11:49:19
    *0    *0     *0     *0       0     1|0       0 240.0M 678.0M 91.0M      0   0|0   0|0   79b    10k    1 11:49:20

但是当我运行时
* mongostat --username=appadmin --password=mypassword  --authenticationDatabase=mydb

        Failed: not authorized on admin to execute command { serverStatus: 1, recordStats: 0 },

所以我尝试在mydb中添加“clusterMonitor”角色。

db.updateUser(“appadmin”, {roles: [{role: "readWrite", db: “mydb”}, {role: "userAdmin", db: “mydb”}, {role: "clusterMonitor", db: “mydb”}]})
E QUERY    Error: Updating user failed: No role named clusterMonitor@mydb.

在启用了认证的MongoDB中,最好的mongostat使用方法是什么?请帮我解决问题或建议最佳的认证设置。 注意:我的MongoDB版本为3.0.6。

1个回答

8

最后我找到了解决方案,我在管理员数据库中添加了更多的角色。

use admin
db.getUsers()

    {
        "_id" : "admin.admin",
        "user" : "admin",
        "db" : "admin",
        "roles" : [
            {
                "role" : "userAdminAnyDatabase",
                "db" : "admin"
            },
            {
                "role" : "readWriteAnyDatabase",
                "db" : "admin"
            },
            {
                "role" : "dbAdminAnyDatabase",
                "db" : "admin"
            },
            {
                "role" : "clusterAdmin",
                "db" : "admin"
            },
            {
                "role" : "clusterMonitor",
                "db" : "admin"
            }
        ]
    }
]

运行 mongostat --username=admin --password=mypassword --authenticationDatabase=admin 命令,解决问题。


1
似乎clusterMonitor是运行mongostat的关键。 - Yongwei Wu
3
我不明白。你提到 mongostat 对于 appadmin 失败了,但是给出了 admin 用户的解决方案?你能够粘贴一下 mongostat --username=appadmin --password=mypassword --authenticationDatabase=mydb 的输出吗? - deppfx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接