MongoDB - 用户权限

3

这可能是一个愚蠢的新手问题。我在Google上搜索了答案,也在stackoverflow上找到了一些内容,但还没有真正奏效的。

我试图创建一个数据库,并为用户分配可以向数据库中插入条目的权限。

到目前为止,我已经成功创建了以下用户及其相关权限:

$ ./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进行身份验证。 仍然没有成功:

> 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”的数据库,并添加一个名为“users”的集合。由于拥有最高特权的用户是“node2”,我先切换到该用户。但该用户无法向新数据库的新集合中插入记录:

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

“admin”也不行。

很抱歉,我很无知,已经花了几个小时在谷歌上搜索,仍然难以将MongoDB文档中的许多不同信息拼凑在一起。

感谢您的任何帮助!

1个回答

5

本答案仅适用于MongoDB 2.4.X及以下版本。在MongoDB 2.6下,执行此操作的方法显著不同。

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

db.system.users.find()

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接