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