2014-01-21 67 views
5

我在mongo01test數據庫中創建了一個用戶「mongo01testro」。在Mongo數據庫實例中爲特定數據庫創建只讀用戶

use mongo01test 
db.addUser("mongo01testro", "pwd01", true); 
db.system.users.find(); 
{ "_id" : ObjectId("53xyz"), "user" : "mongo01testro", "readOnly" : true, "pwd" : "b9eel61" } 

當我從另一個會話身份登錄這個新創建的用戶, 我能夠插入收集這是奇怪的文件。

我希望做如下:

  1. 創建2個獨立用戶一個只和一個用於讀寫的 每個數據庫中讀取。
  2. 創建admin用戶,其中sysadmin/dba訪問用於備份/恢復的Mongodb實例中的所有 數據庫或管理 用途。

請給予幫助。

問候, Parag

+0

你能否也請發送你如何連接? –

+0

您是否在'admin'數據庫中創建了[管理用戶](http://docs.mongodb.org/manual/tutorial/add-user-administrator/)?如果'admin'數據庫中沒有用戶,您仍然可以通過[localhost exception]進行連接(http://docs.mongodb.org/manual/tutorial/add-user-administrator/#authenticate-with-全行政存取通本地主機)。當'mongod'啓用auth啓用時,localhost異常可用於設置您的第一個管理用戶。 – Stennie

+0

感謝Stennie的回覆。我做了以下事情//創建管理員用戶 使用管理員 db.addUser('root','strong_password'); //只讀用戶 使用dbforuser1 db.addUser('user1','user1_pass',true); 當以user1登錄時,它仍然允許我寫入。請提供幫助。 – user3111436

回答

1

這裏是我的scneario;

// Create admin user 
use admin 
db.addUser('root', 'strong_password'); 

// Read only user 
use dbforuser1 
db.addUser('user1', 'user1_pass', true); 

// Read/Write access 
use dbforuser2 
db.addUser('user2', 'user2_pass'); 

如果你想登錄到dbforuser1

use dbforuser1 
db.auth('user1', 'user1_pass') 
+0

嗨,謝謝你的回覆。 – user3111436

+0

請確認我們需要在管理員中創建root用戶的原因。如果我們創建只讀或讀寫用戶,我認爲這是必需的。 – user3111436

+0

你如何連接到數據庫?你解決了你的問題嗎? –

9

你忘--auth使

創建用戶

// ensure that we have new db, no roles, no users 
use products 
db.dropDatabase() 

// create admin user 
use products 
db.createUser({ 
    "user": "prod-admin", 
    "pwd": "prod-admin", 
    "roles": [ 
     {"role": "clusterAdmin", "db": "admin" }, 
     {"role": "readAnyDatabase", "db": "admin" }, 
    "readWrite" 
    ]}, 
    { "w": "majority" , "wtimeout": 5000 } 
) 

// login via admin acont in order to create readonly user 
// mongo --username=prod-admin --password=prod-admin products 
db.createUser({ 
    "user": "prod-r", 
    "pwd": "prod-r", 
    "roles": ["read"] 
}) 

啓用身份驗證:

sudo vim /etc/mongod.conf # edit file 
    # Turn on/off security. Off is currently the default 
    #noauth = true 
    auth = true 
sudo service mongod restart # reload configuiration 

檢查寫入限制:

# check if write operation for readonly user 
$ mongo --username=prod-r --password=prod-r products 
MongoDB shell version: 2.6.4 
connecting to: products 
> db.laptop.insert({"name": "HP"}) 
WriteResult({ 
    "writeError" : { 
     "code" : 13, 
     "errmsg" : "not authorized on products to execute command { insert: \"laptop\", documents: [ { _id: ObjectId('53ecb7115f0bfc61d8b1113e'), name: \"HP\" } ], ordered: true }" 
    } 
}) 

# check write operation for admin user 
$ mongo --username=prod-admin --password=prod-admin products 
MongoDB shell version: 2.6.4 
connecting to: products 
> db.laptop.insert({"name": "HP"}) 
WriteResult({ "nInserted" : 1 }) 

# check read operation for readonly user  
$ mongo --username=prod-r --password=prod-r products 
MongoDB shell version: 2.6.4 
connecting to: products 
> db.laptop.findOne() 
{ "_id" : ObjectId("53ecb54798da304f99625d05"), "name" : "HP" } 
0

MongoDB的改變它處理用戶的方式在版本> = 2.2和2.6,如果你正在更新MongoDB的,你將不得不Upgrade User Authorization Data to 2.6 Format

versions < 2.2(遺留)中,您使用@HüseyinBABAL建議的db.addUser(username, password, readOnly)函數。如果您使用的版本> 2.2或2.6,則您可以更好地控制您可以對角色和權限執行的操作。

因此,假如你使用蒙戈V> 2.6,您可以創建類似:

use admin 

db.createUser({ 
    user: "myUsername", 
    pwd: "mypwd", 
    roles: [{ 
     role: "userAdminAnyDatabase", 
     db: "admin" 
    }] 
}) 

db.addUser({ 
    user: "username", 
    pwd: "password", 
    roles: [{ 
     role: "readWrite", 
     db: "myDBName" 
    }] 
}) 

可以使用Build in Roles或者你甚至可以create custom roles

因此,正如您所看到的,當涉及到身份驗證和角色管理時,使用v> 2.6時顯然有更多的選項。

相關問題