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这个数据库进行操作了。