吹个牛B,本身的MongoDB裸奔了快半年,从未遭受黑客攻击。也不知道是本身运气好,仍是黑客对个人乞丐版服务器看不上眼。不过既然知道了数据库裸奔的危险性,就要给它上把锁。然而上锁对我这种刻意回避数据库知识的人来讲,也实在不是一件容易的事。html
在学习上锁的过程当中,看了好些文章。为了防止你们看我这篇没懂后还有的看,先给出参考文档:node
一句话,没有密码的数据库,并且又没有改27017这个MongoDB默认端口号,别人一个命令就能够连上去:mongodb
这篇文章也给出了关于MongoDB安全性的详细说明shell
固然你可能说,他怎么知道我用的什么数据库,而后猜到个人端口。我在这里只能说,咱们要相信黑客的技术😂。
数据库
在设置权限以前,咱们要首先改掉默认端口号,这是防止被攻击的第一步。安全
修改默认端口号可分为两步,第一步,关掉MongoDB;第二步,用新的端口号启动MongoDB
服务器
关闭MongoDB也有两种方式,第一是借助mongo shell,使用db.shutdownServer()
,第二是直接杀进程。学习
shutdownServer的使用方法以下:ui
重启MongoDB也有两种方式:命令行参数启动 和 加载配置文件启动。二者的惟一区别就是后面的方法将配置参数放到了一个配置文件之中。两种方法中,咱们要作的都是改掉默认端口号,先来看第一种方式:
这里讲一下 --fork 的意思,若是不带这个参数,MongoDB的日志会在前台运行,日志会直接打印到shell里面。带上这个参数则会将MongoDB转到后台运行,同时将运行日志写到logpath里面,而不是直接打印到命令行。
接下来,讲到设置密码的关键环节了,没有密码,只改变端口,就好像把门从朝东改为了朝南,却仍是没有上锁。因此再加上密码这一步才算安全。在设置MongoDB的密码前,咱们要知道如下几点:
这里不讲每一个角色(role)有哪些权限,更多角色相关的内容能够参考官方文档build-in roles。下面设置密码的步骤主要参考MongoDB官方文档:https://docs.mongodb.com/manual/tutorial/enable-authentication/
第一步:开启MongoDB服务
第二步:进入MongoDB shell,相似于node.js的node
命令
第三步:进入admin数据库,以 userAdminAnyDatabase 的角色建立admin帐号,这个帐号建立后,能够为任何数据库建立用户
建立完成后推出mongo shell。
第四步:加入受权重启MongoDB,方法上面介绍过了,可是要加上受权参数--auth
第五步:使用--auth
启动后,登陆mongo shell就须要输入密码了,能够将帐号密码放在一条命令中,也能够先进入shell,再输入帐号密码鉴权,分别对应以下两条语句:
或者先登陆再使用auth受权
第六步:你登陆 admin 数据库后,就能够为别的业务数据库建立帐号密码了,好比为 test 和 reporting数据库建立帐号密码:
第七步:推出shell后,如今能够用新建立的帐号密码登陆test数据库了:
若是你用moogoose登陆,那你的url应该改为以下格式:
本文完