Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB-用户权限_Mongodb - Fatal编程技术网

MongoDB-用户权限

MongoDB-用户权限,mongodb,Mongodb,这可能是一个愚蠢的新手问题。我在谷歌搜索了一下答案,在stackoverflow上找到了一些东西,但还没有真正起作用 我正在尝试创建一个数据库,以及一个可以向数据库插入条目的用户 到目前为止,我已成功创建了以下用户和相关权限: $ ./mongo localhost:29525/admin -username admin -password "somesecret" MongoDB shell version: 2.4.9 connecting to: localhost:29525/admin

这可能是一个愚蠢的新手问题。我在谷歌搜索了一下答案,在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”用户完全权限,但不幸的是,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”,并添加一个集合“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    
在这方面,“管理员”也不能

很抱歉我的无知,我已经花了几个小时在这里搜索,仍然在努力拼凑MongoDB文档中许多不一致的信息所呈现的拼图


谢谢你的帮助

此答案仅适用于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']}})