2014-04-03 100 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']}})