如何在mongodb中向用户提供诊断操作listDatabase?

JGS*_*JGS 3 authentication mongodb openshift

我正在尝试从Java应用程序连接到openshift中的mongodb数据库,并且在允许的角色和操作上遇到了一些麻烦。

我像这样运行rch port-forward命令:

rhc port-forward -a test
Run Code Online (Sandbox Code Playgroud)

一切顺利,我可以使用以下方法连接到数据库:

mongo admin -u admin -p '*******' --host 127.0.0.1 --port 44506
Run Code Online (Sandbox Code Playgroud)

我可以执行以下命令:

> use test
> show databases
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用以下方法直接连接到数据库:

mongo test -u admin -p '*******' --host 127.0.0.1 --port 44506
Run Code Online (Sandbox Code Playgroud)

我无法运行show database命令

listDatabases failed:{ "ok" : 0, "errmsg" : "unauthorized" } at src/mongo/shell/mongo.js:47
Run Code Online (Sandbox Code Playgroud)

如何在此数据库中向该用户提供操作listDatabase?

我在mongodb文档http://docs.mongodb.org/manual/reference/privilege-actions/#security-user-actions中找到了此页面,该页面 讨论了诊断操作,但未提及如何向用户提供此类操作。

谢谢您的帮助。

i80*_*and 5

正如wdberkeley所提到的,您必须在admin数据库中拥有一个能够列出数据库的用户。

为此,您首先必须为此用户创建一个非常小的“角色”,以允许他们列出数据库,然后创建一个同时具有此角色以及用于读写其他数据库的角色的用户:

use admin

db.runCommand({ createRole: "listDatabases",
    privileges: [
        { resource: { cluster : true }, actions: ["listDatabases"]}
    ],
    roles: []
})

db.createUser({
    user: "<userName>",
    pwd: "<passwd>",
    roles: [
        { role: "readWrite", db: "test" },
        { role: "listDatabases", db: "admin" }
    ]
})
Run Code Online (Sandbox Code Playgroud)

MongoDB的文档有两个参考createRolecreateUser,如果您想了解更多关于这些命令。