前言
遇到的问题跟一篇博客(mongoDB 数据莫名其妙的没了)的描述一样:
问题
之前没有接触过mongoDB,然后接手一个项目使用的是MongoDB,我就跟着网上的教程搭建一个MongoDB的服务,并运行起来。一开始没有啥问题,成功的把服务与MongoDB都启动以来,运行也没有问题。但是过了几天,我再次打开时发现,以前的数据神奇的消失了。我还在想,是有什么定时清除的么,还是什么原因导致崩了然后数据就被清理了。
查找原因
第一次遇到我没有在意,重启了一下MongoDB,然后就放那了,重新加了一些测试数据。过了段时间,又遇到了数据被清空,于是乎下决心排查一下到底是什么原因。首先,我看到了整个里面就一个db,名字为
READ_ME_TO_RECOVER_YOUR_DATA
一看这个就不是我的库嘛,看着也不像系统库。之前没注意看这个名字,以为就是个系统生成的库,现在注意一下这个名字就感觉不大对劲。
阅读此内容帮助你恢复数据,感觉被黑了。实际上就是被黑了 ·····
刚接触果然是没有经验啊,还好这里都是些测试数据,并不是正式运营的数据,那我可就死犊子了。跟着教程走果然留下了坑····
原因很简单,我修改的配置,bind_ip为 0.0.0.0,端口号用的默认的27017。这样很容易被扫描到,更何况我也没有设置用户名和密码,有些人设置的弱密码也很容易被破解,这就是光着身子在互联网上裸奔啊,人家写个脚本就能抓到,只能怪自己。
我是通过Docker容器来使用MongoDB的,放在远程服务器中运行。测试开发时就不需要本机开启MongoDB了,(当然开发需要开启很多软件,例如redis、mysql、nacos注册中心,导致笔记本电脑风扇的声音很大,而且很烫,好吧扯远了)。
Docker-compose.yaml文件如下所示:
其中的command: mongod --auth
是添加认证auth,配置管理员和密码。
my_mongo:
image: mongo:latest
container_name: my_mongo
restart: always
volumes:
- /root/jzt/docker/mongo:/data/db
- /root/jzt/docker/mongo/configdb:/data/configdb
ports:
- 27017:27017
command: mongod --auth
environment:
- MONGO_INITDB_ROOT_USERNAME=jzt #初始化管理员用户名和密码
- MONGO_INITDB_ROOT_PASSWORD=xxxx2022
tty: true
创建普通用户:
> use admin
switched to db admin
> db.auth("jzt","xxxx2022")
1
db就是MongoDB里的数据库。
为数据库创建可访问/读写的用户,并给用户配置密码。以后要读写数据库必须先进行验证。
> db.createUser(
... {
... user:"jzt",
... pwd:"xxxx2022",
... roles:[
... {role:"readWrite",db:"yygh"},
... {role:"dbOwner",db:"yygh"}
... ]
... }
... )
Successfully added user: {
"user" : "jzt",
"roles" : [
{
"role" : "readWrite",
"db" : "yygh"
},
{
"role" : "dbOwner",
"db" : "yygh"
}
]
}
>
使用NoSQLBooster图形化界面, 想要建立自定义数据库的连接,必须先验证才能访问数据库: