官方手册中启动 MongoDB 服务时没有任何参数,一旦客户端连接后可以对数据库任意操作,而且可以远程访问数据库,所以推荐开发阶段可以不设置任何参数,但对于生产环境还
是要仔细考虑一下安全方面的因素,而提高 MongoDB 数据库安全有几个方面:
绑定IP内网地址访问MongoDB服务
设置监听端口
使用用户名和口令登录
绑定IP 内网地址访问MongoDB服务
MongoDB 可以限制只允许某一特定 IP 来访问,只要在启动时加一个参数 bind_ip 即可,如下:
服务端限制只有192.168.1.103这个IP可以访问MongoDB 服务
[root@localhost bin]# ./mongod --bind_ip 192.168.1.103
设置监听端口
官方默认的监听端口是27017,为了安全起见,一般都会修改这个监听端口,避免恶意的连
接尝试,具体如下:
将服务端监听端口修改为28018
[root@localhost bin]# ./mongod --bind_ip 192.168.1.103 --port 28018
使用用户名和口令登录
MongoDB默认的启动是不验证用户名和密码的,启动MongoDB后,可以直接用MongoDB连接上来,对所有的库具有root权限。所以启动的时候指定参数,可以阻止客户端的访问和连接。
先启用系统的登录验证模块, 只需在启动时指定 auth 参数即可,如
[root@localhost bin]# ./mongod --auth
建立系统root帐号
在admin库中新添一个用户root:
[root@localhost bin]# ./mongo
MongoDB shell version: 1.8.1
connecting to: test
> db.addUser("root","111")
{
"user" : "root",
"readOnly" : false,
"pwd" : "e54950178e2fa777b1d174e9b106b6ab"
}
> db.auth("root","111")
本地客户端连接,指定用户,结果如下:
[root@localhost bin]# ./mongo -u root -p
MongoDB shell version: 1.8.1
Enter password:
connecting to: test
> show collections;
system.indexes
system.users
建立指定权限用户
MongoDB 也支持为某个特定的数据库来设置用户,如我们为 test 库设一个只读的用户user_reader:
[root@localhost bin]# ./mongo -u root -p
MongoDB shell version: 1.8.1
Enter password:
connecting to: test
> show collections;
system.indexes
system.users
> use test
switched to db test
> db.addUser("user_reader", "user_pwd", true)
{
"user" : "user_reader",
"readOnly" : true,
"pwd" : "0809760bb61ee027199e513c5ecdedc6"
}