由于MongoDB没有默认的管理员帐号,有些用户为了方便省事在未进行用户权限设置的情况下,开放访问端口,将数据库暴露在公网环境,遭受多个黑客组织攻击删除数据并索要赎金。其实,如果稍加防范,就能避免此类事件发生。这次我们通过设置用户权限来提升MongoDB的安全性。

Tips

  1. mongodb没有默认的管理员帐号,需要自行设置
  2. 切换到admin数据库,创建帐号是mongodb管理员的帐号
  3. 切换到其他数据库,创建帐号是那个数据库的用户(管理员)
  4. 用户只能通过创建该帐号的数据库登录,包括管理员
  5. 管理员可以管理所有的数据库
  6. mongodb可以限制访问权限(以auth方式运行),或者不限制访问权限 如:
  1. /usr/local/mongodb/bin/mongod --auth -f
  2. /usr/local/mongodb/bin/mongodb.config // auth方式运行/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/bin/mongodb.config // 不限制访问权限

一、创建管理员帐号

  1. > /usr/local/mongodb/bin/mongo localhost:27017 // 连接mongo
  2. ...
  3. > use admin // 切换到admin数据库
  4. switched to db admin
  5. > db.createUser({user:'admin',pwd:'123',roles:['root']}) // 创建root权限的管理员帐号
  6. ...
  7. > db.auth("admin","123") // 验证用户权限
  8. true // true则验证成功

二、创建普通用户

  1. > /usr/local/mongodb/bin/mongo localhost:27017 // 连接mongo
  2. ...
  3. > use xxx // 切换到xxx数据库
  4. switched to db xxx
  5. > db.createUser({user:'eason',pwd:'123',roles:['dbAdmin','dbOwner','read','readWrite','userAdmin']}) // 创建以上roles权限的普通用户
  6. > db.auth("admin","123") // 验证用户权限
  7. true // true则验证成功

三、开启权限认证

  1. > ps aux | grep mongo // 查看mongodb进程
  2. ...
  3. > kill -9 进程号 // 杀掉mongodb进程
  4. > /usr/local/mongodb/bin/mongod -auth -f /usr/local/mongodb/bin/mongodb.conf // auth方式启动mongodb开启权限认证(注意将上述配置文件名称与路径修改成自己的)
  5. > /usr/local/mongodb/bin/mongo localhost:端口/用户所属数据库 -u 用户名 -p 密码 // 用帐号密码连接mongodb

四、SpringMVC相应配置

将以下配置添加到applicationContext.xml中,注意将原有的mongoTemplate的bean删除
  1. <!--设置用户验证 -->
  2. <bean id="userCredentials" class="org.springframework.data.authentication.UserCredentials">
  3. <constructor-arg name="username" value="admin" />
  4. <constructor-arg name="password" value="uz2delc7" />
  5. </bean>
  6. <!-- mongodb的主要操作对象,所有对mongodb的增删改查的操作都是通过它完成,databaseName为要操作的数据库 -->
  7. <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
  8. <constructor-arg name="mongo" ref="mongo" />
  9. <constructor-arg name="databaseName" value="mydatabase" />
  10. <constructor-arg name="userCredentials" ref="userCredentials" />
  11. </bean>