MongoDB - 用户权限

the*_*ter 3 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" ] }
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想给"admin"用户提供完全权限,但不幸的是,admin的'userAdminAnyDatabase'权限不足以启用此权限:

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

我想知道我是否真的没有以"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
Run Code Online (Sandbox Code Playgroud)

所以我尝试了"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
Run Code Online (Sandbox Code Playgroud)

除此之外,我尝试创建一个数据库'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    
Run Code Online (Sandbox Code Playgroud)

也不是那个问题可以"管理".

对不起我的无知,我花了几个小时谷歌搜索这里,我仍在努力拼凑由MongoDB文档中的许多信息提供的拼图碎片.

谢谢你的帮助!

dav*_*veh 5

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

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

db.system.users.find()
Run Code Online (Sandbox Code Playgroud)

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

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