MongoDB - 用户权限

时间:2014-04-03 21:57:19

标签: mongodb

这可能是一个愚蠢的新手问题。我在Google-scape上搜索了答案,并在stackoverflow上找到了一些东西,但还没有真正有效。

我正在尝试创建一个数据库,以及一个可以向db插入条目的用户。

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

$ ./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”用户提供完全权限,但遗憾的是,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

所以我尝试了“node2”用户 - 我创建了具有更多权限的用户(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文档上的许多信息提供的拼图。

感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

这个答案仅适用于MongoDB 2.4.X及更低版本。在MongoDB 2.6下,执行此操作的方法有很大不同

您正在查询示例中的“system.users”集合:

db.system.users.find()

但您的更新是针对“用户”集合,管理员用户无法访问该集合,因为它只有“userAdminAnyDatabase”。您可以尝试对“system.users”运行更新吗?即

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