2014-01-21 64 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时显然有更多的选项。

相关问题