2014-04-03 53 views
3

这可能是一个愚蠢的新手问题。我搜索了Google-scape的答案,并在stackoverflow上找到了一些东西,但没有任何真正的工作。MongoDB - 用户权限

我想创建一个数据库和一个用户谁可以插入到数据库的条目。

到目前为止,我设法创建以下用户&相关联的特权:

$ ./mongo localhost:29525/admin -username admin -password "somesecret" 
MongoDB shell version: 2.4.9 
connecting to: localhost:29525/admin 
> db.system.users.find() 
    { "_id" : ObjectId("533dc34753178fa1d0707308"), "user" : "admin", "pwd" : "145efb041abb3f9dd2531b26c90f2a4c", "roles" : [ "userAdminAnyDatabase" ] } 
    { "_id" : ObjectId("533dc9c03eb5b535e9691f21"), "user" : "node", "pwd" : "a2cbb645cec16dedd4a4f9ee53a332a7", "roles" : [ "readWrite", "dbAdmin" ] } 
    { "_id" : ObjectId("533dd1c52d0f16b6fae61188"), "user" : "node2", "pwd" : "488fba587da677d48825b425ebf7031e", "roles" : [  "userAdminAnyDatabase",   "userAdmin", "clusterAdmin",   "dbAdminAnyDatabase" ] } 

我非常想给“admin”用户完全权限,但不幸的是管理的“userAdminAnyDatabase”特权是不够的,启用此:

> db.users.update({"admin" : "somesecret"}, {$addToSet: {'roles': [ 'dbAdminAnyDatabase', 'clusterAdmin']}}, false, false) 
not authorized for update on admin.users 

我想知道,如果可能我只是没有实际执行该命令以“admin”,所以我重新认证为admin用户。仍然没有喜悦:

> db.auth("admin", "somesecret") 
1 
> db.users.update({"admin" : "somesecret"}, {$addToSet: {'roles': [ 'dbAdminAnyDatabase', 'clusterAdmin']}}, false, false) 
not authorized for update on admin.users 

所以我尝试了“节点2”用户 - 我创造了与更多的权限(dbAdminAnyDatabase,clusterAdmin,..),所以也许这将工作?但可惜它也失败:

> db.auth("node2", "anothersecret") 
1 
> db.users.update({"admin" : "somesecret"}, {$addToSet: {'roles': [ 'dbAdminAnyDatabase', 'clusterAdmin']}}, false, false) 
not authorized for update on admin.users 

这且不说,我试图创建一个数据库“mynewdb”,并添加收藏“用户”。由于具有最多权限的用户是“node2”,我先切换到该用户。但是,用户不能记录插入到新的数据库的新的集合:

> db.auth("node2", "anothersecret") 
1 
> use mynewdb 
switched to db mynewdb 
> db.users.save({username: "philipp"}) 
not authorized for insert on testapp.users  

也为此事可以“管理”。

对不起,我已经花了几个小时在这里搜索,并且仍然在拼凑拼图碎片,这些碎片是由MongoDB文档中的许多不同位置的信息呈现的。

感谢您的帮助!

回答

5

此答案仅适用于MongoDB 2.4.X及更低版本。这样做的方法是MongoDB的2.6下

您正确查询您的例子“system.users”集合显著不同:

db.system.users.find() 

但是你更新的“用户”集合,它的admin用户无法访问,因为它只有“userAdminAnyDatabase”。你可以尝试运行你的更新反对“system.users”?即

db.system.users.update({"admin" : "somesecret"}, {$addToSet: {'roles': [ 'dbAdminAnyDatabase', 'clusterAdmin']}})