由于MongoDB没有默认的管理员帐号,有些用户为了方便省事在未进行用户权限设置的情况下,开放访问端口,将数据库暴露在公网环境,遭受多个黑客组织攻击删除数据并索要赎金。其实,如果稍加防范,就能避免此类事件发生。这次我们通过设置用户权限来提升MongoDB的安全性。
Tips
- mongodb没有默认的管理员帐号,需要自行设置
- 切换到admin数据库,创建帐号是mongodb管理员的帐号
- 切换到其他数据库,创建帐号是那个数据库的用户(管理员)
- 用户只能通过创建该帐号的数据库登录,包括管理员
- 管理员可以管理所有的数据库
- mongodb可以限制访问权限(以auth方式运行),或者不限制访问权限 如:
/usr/local/mongodb/bin/mongod --auth -f
/usr/local/mongodb/bin/mongodb.config // auth方式运行/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/bin/mongodb.config // 不限制访问权限
一、创建管理员帐号
> /usr/local/mongodb/bin/mongo localhost:27017 // 连接mongo
...
> use admin // 切换到admin数据库
switched to db admin
> db.createUser({user:'admin',pwd:'123',roles:['root']}) // 创建root权限的管理员帐号
...
> db.auth("admin","123") // 验证用户权限
true // 为true则验证成功
二、创建普通用户
> /usr/local/mongodb/bin/mongo localhost:27017 // 连接mongo
...
> use xxx // 切换到xxx数据库
switched to db xxx
> db.createUser({user:'eason',pwd:'123',roles:['dbAdmin','dbOwner','read','readWrite','userAdmin']}) // 创建以上roles权限的普通用户
> db.auth("admin","123") // 验证用户权限
true // 为true则验证成功
三、开启权限认证
> ps aux | grep mongo // 查看mongodb进程
...
> kill -9 进程号 // 杀掉mongodb进程
> /usr/local/mongodb/bin/mongod -auth -f /usr/local/mongodb/bin/mongodb.conf // 以auth方式启动mongodb开启权限认证(注意将上述配置文件名称与路径修改成自己的)
> /usr/local/mongodb/bin/mongo localhost:端口/用户所属数据库 -u 用户名 -p 密码 // 用帐号密码连接mongodb
四、SpringMVC相应配置
将以下配置添加到applicationContext.xml中,注意将原有的mongoTemplate的bean删除
<!--设置用户验证 -->
<bean id="userCredentials" class="org.springframework.data.authentication.UserCredentials">
<constructor-arg name="username" value="admin" />
<constructor-arg name="password" value="uz2delc7" />
</bean>
<!-- mongodb的主要操作对象,所有对mongodb的增删改查的操作都是通过它完成,databaseName为要操作的数据库 -->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongo" ref="mongo" />
<constructor-arg name="databaseName" value="mydatabase" />
<constructor-arg name="userCredentials" ref="userCredentials" />
</bean>