如何向mongodb中的用户提供诊断操作列表数据库?

如何向mongodb中的用户提供诊断操作列表数据库?,mongodb,authentication,openshift,Mongodb,Authentication,Openshift,我试图在openshift中从java应用程序连接到mongodb数据库,但在允许的角色和操作方面遇到了一些问题 我按如下方式运行rch port forward命令: rhc port-forward -a test 一切都很顺利,我可以通过以下方式连接到数据库: mongo admin -u admin -p '*******' --host 127.0.0.1 --port 44506 mongo test -u admin -p '*******' --host 127.0.0.1

我试图在openshift中从java应用程序连接到mongodb数据库,但在允许的角色和操作方面遇到了一些问题

我按如下方式运行rch port forward命令:

rhc port-forward -a test
一切都很顺利,我可以通过以下方式连接到数据库:

mongo admin -u admin -p '*******' --host 127.0.0.1 --port 44506
mongo test -u admin -p '*******' --host 127.0.0.1 --port 44506
我可以执行如下命令:

> use test
> show databases
但如果我使用以下方式直接连接到数据库:

mongo admin -u admin -p '*******' --host 127.0.0.1 --port 44506
mongo test -u admin -p '*******' --host 127.0.0.1 --port 44506
我无法运行show databases命令

listDatabases failed:{ "ok" : 0, "errmsg" : "unauthorized" } at src/mongo/shell/mongo.js:47
如何在此数据库中向此用户提供操作列表数据库

我在mongodb文档中找到了这个页面 它讨论了诊断操作,但没有提到如何向用户提供此类操作


谢谢您的帮助。

您以两个不同的用户身份登录。用户的范围由名称空间确定,因此居住在
test
中的用户John与居住在
admin
中的用户John不同,尽管这两个John可能在
test
数据库中都有权限。我想你们可能已经理解了这一点,但我想澄清一下,以防万一


我不相信您可以在特权中将
listDatabases
操作赋予非
admin
数据库的用户范围,因为
listDatabases
操作必须与
cluster
资源一起进行(
listDatabases
是一种集群范围内的操作),而具有
群集
资源的权限只能限定为
管理员
数据库上的角色。去掉MongoDB授权模型的术语,非
管理员
数据库用户不能使用
列表数据库
,因为这是一个集群范围的操作,只有
管理员
数据库用户才能做集群范围的事情。

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

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

使用admin
db.runCommand({createRole:“listDatabases”,
特权:[
{资源:{cluster:true},操作:[“listDatabases”]}
],
角色:[]
})
db.createUser({
用户:“”,
pwd:“,
角色:[
{role:“readWrite”,db:“test”},
{role:“listDatabases”,db:“admin”}
]
})

如果您想了解更多关于这些命令的信息,MongoDB文档中提供了和的参考。

只想添加i807中提到的方法,并在MongoDB 3.2.3上运行

  • 创建包含listDatabase并指定cluster的自定义角色:true,我在将资源指定为db时这样做了,它不起作用
  • 将此角色授予用户 注意:执行安全任务时,请确保连接到正确的数据库,因为您需要使用创建用户的特定数据库进行身份验证

  • 如果您使用ssh连接到应用程序中并以该用户的身份运行mongodb shell,您是否可以执行该命令?这会引发问题。因为我正在使用Java驱动程序进行连接,它需要在某个时候执行{listDatabases:1}命令。很明显,我没有给他对整个数据库的管理员权限。您不需要向用户授予管理员权限。您只需要在
    admin
    数据库上创建用户,这样他就可以获得特殊的多数据库特权,如
    listDatabases
    特权。您可以让一个用户列出所有数据库,但只能在一个数据库上插入、更新或查找。您能给我一个如何执行此操作的示例,或者告诉我如何执行此操作的位置吗?我是mongodb世界的新手。我无法运行createRole命令,我怀疑这与mongodb版本有关,openshift目前在2.4.9上。。。这是2.6.x。。。我得到“没有这样的cmd:createRole”。