学习MongoDB(三)——安全和授权

MongoDB在非授权模式下启动显然是不安全的,任何人都能通过客户端连接数据库服务器,并且操作里面的所有数据。MongoDB以安全的授权方式启动:

mongod --auth

这样就只有数据库添加的授权用户才能连接数据库,并进行数据操作。

官方给出的用户管理的说明:http://www.mongodb.org/display/DOCS/Security+and+Authentication

添加一个admin超级管理员用户:

> use admin
> db.addUser("oneAdminUser", "123456")

理解成MongoDB把所有的admin管理员添加到了一个admin数据库中进行管理。

用admin用户的身份登陆数据库,给一般的数据添加普通用户:

> use projectx
> db.addUser("joe", "passwordForJoe")
> db.addUser("guest", "passwordForGuest", true)

其中第二个guest用户的readonly属性为true。

查看某个数据库中拥有的所有用户:

> use projectx
> show users
> // or
>db.system.users.find()

 给某个用户更改密码也用db.addUser,这个函数会判断用户村不存在,不存在就创建,存在就(密码)替换掉以前的。

删除用户:

> db.removeUser("user1")
> // or
> db.system.users.remove({user:"user2"})

好了,用户添加完了,现在来看这么用mongo 以某个用户的身份登陆MongoDB数据库,首先确保数据库以授权的安全形式启动了,以admin用户的身份登陆

> mongo 192.168.1.154/admin -u oneAdminUser -p 123456

oneAdminUser密码是123456,以admin的身份登陆位于192.168.1.154上的MongoDB数据库。因为是admin用户,登陆进去之后就能进行任何操作。

普通用户登陆普通的数据库的方式类似的:

> mongo 192.168.1.154/projectx -u joe -p passwordForJoe

joe这个用户登陆位于192.168.1.154机器上的projectx数据库。

如果在Java程序中登陆,代码如下:

Mongo mongo = new Mongo("192.168.1.154", 27017); 
DB db = mongo.getDB("admin"); 
db.authenticate("oneAdminUser", "123456".toCharArray());
System.out.println("数据库列表:"+mongo.getDatabaseNames());  //所有有数据的数据库名称

db = mongo.getDB("projectx");
//然后可以对任何数据库进行任何操作
System.out.println(db.command("isMaster"));  
DBCollection collection = db.getCollection("onecollection"); 
collection.find();

 普通用户登陆普通数据库:

Mongo mongo = new Mongo("192.168.1.154", 27017);   
db =  mongo.getDB("projectx");
db.authenticate("guest", "123456".toCharArray()); 
DBCollection collection = db.getCollection("onecollection"); 
collection.find();

guest这个用户就只能对projectx这个数据库进行操作了。 

猜你喜欢

转载自tonl.iteye.com/blog/1688127