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

Jis*_*son 5 mongodb mongo-shell

我刚刚为mongodb实现了auth,在数据库“ 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"
            }
        ]
    }
].
Run Code Online (Sandbox Code Playgroud)

如果我运行以下命令,

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
Run Code Online (Sandbox Code Playgroud)

但是当我跑步时

* mongostat --username=appadmin --password=mypassword  --authenticationDatabase=mydb

        Failed: not authorized on admin to execute command { serverStatus: 1, recordStats: 0 },
Run Code Online (Sandbox Code Playgroud)

因此,我尝试在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.
Run Code Online (Sandbox Code Playgroud)

在启用了身份验证的mongoldb中执行mongostat的最佳方法是什么?请帮助我解决问题或建议最佳身份验证设置。注意:我的mongodb版本3.0.6

Jis*_*son 6

终于我找到了解决方案,我向管理数据库添加了更多角色,

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"
            }
        ]
    }
]
Run Code Online (Sandbox Code Playgroud)

并运行mongostat --username = admin --password = mypassword --authenticationDatabase = admin,解决问题

  • 我不明白。您提到“mongostat”对于“appadmin”失败,但为“admin”用户提供了解决方案?您可以粘贴“mongostat --username=appadmin --password=mypassword --authenticationDatabase=mydb”的输出吗 (3认同)