mongodb数据丢失及问题分析

18996次浏览

前言

大家新年好!祝大家2017年万事如意!从2016年12月30号~2017年元旦,haorooms官方博客数据库,数据二度丢失。怀疑被别人删除!在此声明:亲爱的黑客们,谢谢你们对我博客安全性的提醒,我已经升级mongodb数据库,增加了auth权限,希望不要再对我的博客进行攻击了,作为一名前端开发人员,对这些知识了解的还不够深入,希望您今后不要再攻击我的博客。

mongo数据丢失

mongo数据丢失,辛亏我有自动化脚本,每个周会自动备份数据,12月30号数据丢失之后,我恢复了12月24号的数据,但是最近两篇文章丢失了,因为博客文章和github上面文章同步的,我把github上面的最后2篇数据同步到现在博客,并进行了一次数据备份。由于12月30号晚上就要有事外出,12月30号还有工作上的事情,因此,简单的恢复了一下数据,就没有然后给博客增加了auth权限,但是发现nodejs启动不起来了,没有办法,我又取消了auth权限!

元旦期间,也就是2017年1月1号,我用手机发现我的博客数据再次丢失,我怀疑是有人特意删除的,由于没有带电脑,只能等到2017年1月2号晚上才把数据恢复。然后增加了数据库auth权限。

mongo数据库auth权限

增加了auth权限之后,设置了用户名和密码,重启node,发现如下错误!

2017-01-02T07:29:07.626753+00:00 app[web.1]: MongoError: auth failed
2017-01-02T07:29:07.626756+00:00 app[web.1]:     at Object.toError (/app/node_modules/mongoose/node_modules/mongodb/lib/mongodb/utils.js:114:11)
2017-01-02T07:29:07.626758+00:00 app[web.1]:     at /app/node_modules/mongoose/node_modules/mongodb/lib/mongodb/db.js:1156:31
2017-01-02T07:29:07.626759+00:00 app[web.1]:     at /app/node_modules/mongoose/node_modules/mongodb/lib/mongodb/db.js:1890:9
2017-01-02T07:29:07.626760+00:00 app[web.1]:     at Server.Base._callHandler 

(/app/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/base.js:448:41)
2017-01-02T07:29:07.626762+00:00 app[web.1]:     at /app/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:481:18
2017-01-02T07:29:07.626763+00:00 app[web.1]:     at MongoReply.parseBody 

(/app/node_modules/mongoose/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js:68:5)
2017-01-02T07:29:07.626766+00:00 app[web.1]:     at null.<anonymous> 

(/app/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:201:13)
2017-01-02T07:29:07.626765+00:00 app[web.1]:     at emit (events.js:95:17)
2017-01-02T07:29:07.626764+00:00 app[web.1]:     at null.<anonymous> 

(/app/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:439:20)
2017-01-02T07:29:07.626767+00:00 app[web.1]:     at emit (events.js:98:17)
2017-01-02T07:29:07.413053+00:00 app[web.1]: Listen the port 11221
2017-01-02T07:29:07.623584+00:00 app[web.1]: /app/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/base.js:246
2017-01-02T07:29:08.438433+00:00 heroku[web.1]: Process exited with status 8

这是因为mongodb 3.0的用户机制改变了,数据库账户需要重新设置一下。

我是通过如下步骤

方法一:

shell进入mongo,use admin,创建admin账户3.0创建新用户方法 db.createUser,具体可查看官方文档

use admin

db.createUser(
   {
     user: "root",
     pwd: "password",
     roles:
       [
         { role: "dbOwner", db: "你的数据库名字" }
       ]
   }
)

创建一个超级管理员账号,

这个root就可以操作你的数据库了!

方法二:

首先关闭 auth权限

然后

use 你的数据库表名

db.createUser(
   {
     user: "root",
     pwd: "password",
     roles:
       [
         { role: "dbOwner", db: "你的数据库名字" }
       ]
   }
)

创建针对你数据库的用户名和密码。

然后:

进入到你的数据库表,use "你的数据库表" 验证刚才创建的root 账户

  db.auth(‘root’,‘pwd’)//成功连接

重启mongodb,开启auth=true;(开启--auth)

重启mongodb数据库。首先关闭数据库:

killall mongod

然后启动!

mongodb数据库重启之后,重启nodejs,发现还是会报错误!错误如下

throw new Error('invalid schema, expected mongodb'

经过查询,然后升级了一下mongodb和schema等等,然后在重启nodejs,发现可以启动了!因此,mongo数据库博客安全性修改完毕。

工具推荐

mongodb连接工具,推荐使用 robo3t 地址:https://robomongo.org/

这个工具蛮好用。

mysql连接工具我使用免费的HeidiSQL ,地址是:https://www.heidisql.com/download.php

小结

因为我的博客是2014年搭建的,当时nodejs和mogodb还不完善,很多依赖都是老的,因此难免会有问题,感谢黑客朋友攻击提醒!写博客不易,假如我博客还有什么问题,黑客朋友可以直接QQ联系我,请不要在攻击我的博客了!再次感谢你!

Tags: mongodbmongo数据

相关文章: