最近公司系统要引入MongoDB,所以看了些不少的相关资料。但是发现MongoDB连接安全这块的资料甚少,在这里记录下MongoDB关于连接安全的相关操作。
在默认情况下连接MongoDB,是不需要用户名和密码的,可以通过IP加端口号的方式直接访问,这样在实际运用中是非常危险的。那么接下来就看看MongoDB通过用户来访问的。
MongoDB是通过在数据库下添加用户的方式来控制访问权限的,且必须以-auth方式启动MongoDB时才有效。在admin库下添加的用户,具有超级管理员的权限,在其他库下添加的用户,只能访问操作当前库。例如:
>use admin
>db.addUser('root','root')
//添加超级管理员用户
>use test
>db.addUser('test','test')
//添加test库用户
>mongod --dbpath c:\mongo_data --logpath c:\mongo\logs\logs.txt -auth &
//以auth方式启动mongodb服务
>use admin
>show collections
Fri Apr 13 15:47:14 uncaught exception: error: {
"$err" : "unauthorized db:admin lock type:-1 client:127.0.0.1",
"code" : 10057
}
没权限
>db.auth('root','root')
//然后再
>db.collections
//就能看到表了
(1)JAVA方式通过用户密码访问MongoDB
Mongo m = new Mongo();
DB db = m.getDB("admin");
char[] pwd_char = "pwd1".toCharArray();
boolean auth = db.authenticate("user1",pwd_char);//登陆验证,成功之后才能进行有效操作
if(!auth){
throw new RuntimeException();
}
(2)PHP方式通过用户密码访问MongoDB
//PHP是直接在获取连接对象时就进行配置了
//mongodb://账号:密码@连接地址
$m = new Mongo("mongodb://user1:pwd1@localhost");