MongoDB安全使用指引
MongoDB社区版有三大主要安全措施,分别是安全认证、角色授权和TLS/SSL传输加密。当然除此之外,定期做数据库备份,也是很好的安全防范手段。另外,本文还将对一些提升MongoDB安全性的细节做阐述。其中部分安全措施,暂时不能细化操作步骤,以后实践中再补充。
开发期间做过多的安全配置,会影响开发效率,在必要时按部就班实施各种安全措施即可。
本文不关注分片情况下和MongoDB企业版的安全措施。
一、 安全认证
MongoDB启动时可以附带多种配置,其中-auth就是开启安全认证的参数,开启认证的同时需配置数据库管理员用户名和密码,命令示例:mongod --auth。
如上方式启动数据库后,通过mongo命令进入shell,通过以下步骤配置指定数据库账户:
- 分别运行use admin和db.createUser({user: "admin",pwd: "123456",roles: [ { role: " userAdminAnyDatabase", db: "admin" }]})
- 分别运行use admin和db.auth(‘admin’,’123456’),返回1,表示认证通过
- 分别运行usemydb和db.createUser({user: "qj",pwd: "12345678",roles: [ { role: "readWrite", db: "mydb" }]}),即可为数据库mydb创建账户qj。之后连接该数据库自然要先通过该认证。
二、 角色授权
如上,在创建数据库用户时可以直接指定当前账户的操作权限。这样就可以对每个用户可以执行的操作进行更细粒度的控制。使用基于角色的认证可以限制对数据库的访问,而不是所有的用户都是管理员。
其中几个常用命令简述如下,详情可查MongoDB官方文档:
db.createRole()该命令用于创建角色,并为该角色设定操作权限。MongoDB有默认配置的多种权限供选择,如:read,readWrite等。
db.grantRolesToUser()该命令既是将某角色(权限组)授权给指定用户。
三、 TLS/SSL传输加密
启用TLS/SSL可将应用和数据库之间的传输加密,避免窃听、篡改和“中间人”攻击。具体开启步骤,还需要更多时间调试。
四、 数据库备份
备份可以有效减小数据污染、清空等损失。
这里介绍通过定时执行MongoDB自带的mongodump命令对数据库备份的方法。特别说明一下mongodump得到的备份并非数据库的快照,在备份同时如果数据库在做增删改操作,可能出现数据备份不完整。对于一般应用,把备份生成时间设定在数据库操作较少时即可(比如凌晨3点),暂停应用也是一个办法。
具体操作如下(参考网文http://www.osyunwei.com/archives/8985.html):
1、创建Mongodb数据库备份目录
mkdir -p /home/backup/mongod_bak/mongod_bak_now
mkdir -p /home/backup/mongod_bak/mongod_bak_list
2、新建Mongodb数据库备份脚本
vi /home/crontab/mongod_bak.sh #新建文件,输入以下代码
#!/bin/sh
DUMP=/usr/local/mongodb/bin/mongodump #mongodump备份文件执行路径
OUT_DIR=/home/backup/mongod_bak/mongod_bak_now #临时备份目录
TAR_DIR=/home/backup/mongod_bak/mongod_bak_list #备份存放路径
DATE=`date +%Y_%m_%d` #获取当前系统时间
DB_USER=username #数据库账号
DB_PASS=123456 #数据库密码
DAYS=7 #DAYS=7代表删除7天前的备份,即只保留最近7天的备份
TAR_BAK="mongod_bak_$DATE.tar.gz" #最终保存的数据库备份文件名
cd $OUT_DIR
rm -rf $OUT_DIR/*
mkdir -p $OUT_DIR/$DATE
$DUMP -u $DB_USER -p $DB_PASS -o $OUT_DIR/$DATE #备份全部数据库
tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE #压缩为.tar.gz格式
find $TAR_DIR/ -mtime +$DAYS -delete #删除7天前的备份文件
:wq! #保存退出
系统运维 www.osyunwei.com 温馨提醒:qihang01原创内容©版权所有,转载请注明出处及原文链接
3、修改文件属性,使其可执行
chmod +x /home/crontab/mongod_bak.sh
4、修改/etc/crontab #添加计划任务
vi /etc/crontab #在下面添加
30 1 * * * root /home/crontab/mongod_bak.sh #表示每天凌晨1点30执行备份
5、重新启动crond使设置生效
/etc/rc.d/init.d/crond restart
chkconfig crond on #设为开机启动
service crond start #启动
每天在/home/backup/mongod_bak/mongod_bak_list目录下面可以看到mongod_bak_2015_02_28.tar.gz这样的压缩文件。
五、 限制网络接口
可以通过bind_ip参数,指定允许访问的IP。如:bind_ip=127.0.0.1,192.168.10.188。参数设置可以将允许数据库的地址访问限制为本地和192.168.10.188。
也可通过系统防火墙限制MongoDB的外部访问,使用VPN提供外部访问通道。
六、 禁用HTTP接口
默认情况下Mongodb在端口28017上运行http接口,以提供“主”状态页面。在生产环境下推荐不要使用此接口,最好禁止这个接口。使用"nohttpinterface"配置设置可以禁止这个http接口。(3.2以上版本已经移除HTTPinterface,无需使用该措施)。
nohttpinterface = true
七、 创建专用账户访问MongoDB文件
可以创建一个用户名为mongodb的系统账户,专用于MongoDB文件的访问。这种方式可以强化数据库系统自身安全,防止恶意、强制、以不安全的方式重启MongoDB。
八、 使用MongoDB企业版
使用MongoDB企业版,可以激活更多安全措施。
MongoDB安全使用指引的更多相关文章
- mongodb 用户指引
维护人:陈权 一.mongodb install on linuxcurl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6 ...
- 基于C#的MongoDB数据库开发应用(1)--MongoDB数据库的基础知识和使用
在花了不少时间研究学习了MongoDB数据库的相关知识,以及利用C#对MongoDB数据库的封装.测试应用后,决定花一些时间来总结一下最近的研究心得,把这个数据库的应用单独作为一个系列来介绍,希望从各 ...
- MongoDB系列一(索引及C#如何操作MongoDB)
索引总概况 db.test.ensureIndex({"username":1})//创建索引 db.test.ensureIndex({"username": ...
- MongoDB(索引及C#如何操作MongoDB)(转载)
MongoDB(索引及C如何操作MongoDB) 索引总概况 db.test.ensureIndex({"username":1})//创建索引 db.test.ensureInd ...
- windows环境下Mongodb分片配置
使用MongoDB的GridFS来存储文件,以前一直使用单个服务,分布式环境也一直没有配置成功,今天参考了几位大神的文章终于配置成功,再也不用担心文件存储的性能和安全啦.以下是自己部署的过程和示例,记 ...
- [转帖]Scanners-Box 指引
作者:杨文链接:https://zhuanlan.zhihu.com/p/26534414来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 原文地址:We5ter/Sca ...
- MongoDB的Spring-data-mongodb集成(Win10 x64) 第一章 - MongoDB安装与简单命令
这是MongoDB系列的第一章,作者将持续更新. 1.下载 https://www.mongodb.com/download-center#community 2.安装与配置 有关安装的任何困难请点击 ...
- windows系统,MongoDB开启用户验证登录的正确姿势
MongoDB默认安装并没有开启用户名密码登录,这样太不安全了,百度出来的开启验证登录的文章,对初次使用MongoDB的小白太不友好了,总结下经验,自己写一份指引. 1,我的安装路径是C:\Progr ...
- Ubuntu下MongoDB的安装和使用
本博文介绍了MongoDB,并详细指引读者在Ubuntu下MongoDB的安装和使用.本教程在Ubuntu14.04下测试通过.(2017.09.07) 安装MongoDB MongoDB安装很简单, ...
随机推荐
- Lua中的类型与值
[基础介绍] Lua是一种动态类型的语言.在语言中没有类型定义的语法,每个值都带有其自身的类型信息.在Lua中有8中基本类型,分别是: nil(空)类型 boolean(布尔)类型 number(数字 ...
- HTTP/1.1 请求方法
HTTP(Hypertext Transfer Protocol,超文本传输协议)是一种用于分布式.协作式和超媒体信息系统的 应用层协议.HTTP 是万维网的数据通信的基础.默认端口为 80. ...
- C++中几个输入函数的用法和区别(cin、cin.get()、cin.getline()、getline()、gets()、getchar())
1.cin>> 用法1:最基本,也是最常用的用法,输入一个数字: #include <iostream>using namespace std;main (){int a,b; ...
- linux关于软件安装的博文
https://www.cnblogs.com/kundeg/archive/2018/03/06/7247934.html https://www.cnblogs.com/qiaozhoulin/p ...
- ansible的logging模块用来写日志
[root@node-1 library]# cat dolog.py #!/bin/env python ANSIBLE_METADATA = { 'metadata_version': 'alph ...
- promise async
最简用 promise let res = function () { return new Promise((resolve, reject) => { // 返回一个promise set ...
- spark MLlib Classification and regression 学习
二分类:SVMs,logistic regression,decision trees,random forests,gradient-boosted trees,naive Bayes 多分类: ...
- 001 python基础实战
报名了阿里大学的AI,一直没有学习,今天开始正式学习. 今天是第一节,Python的基础编程实战,里面包含两个示例. 一:任务实现文件的批量重命名. 1.创建一个目录 2.程序 #!/usr/bin/ ...
- Aspnet Mvc 前后端分离项目手记(三)关于restful 风格Url设计
RESTful 不是新东西,简单理解它的核心思想就是最大程度的利用http协议的一些特点,比如uri,比如请求动词,在前后端分离的项目中会有大大的好处 ,好的设计的url简单明了,胜过详细的说明文档. ...
- iOS12系统应用发送普通邮实现发送
iOS12系统应用发送普通邮实现发送 构建好邮件以后,可以发送该邮件.此时需要使用mailComposeDelegate属性,该属性用来设置委托,其语法形式如下: unowned(unsafe) va ...