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安装很简单, ...
随机推荐
- 动态代理和CGlib
静态代理:静态代理的类也需要实现接口interface1,还要创建一个实现接口interface1的其他类class1,并且在静态代理类重写的方法中调用class1重写的方法.操作太多冗余.不好 动态 ...
- Docker安装MySQL数据库
本文翻译自:MySQL Docker Containers:Understanding the basics 1.下载MySQL镜像 docker pull mysql:5.6 如此便可以下载最新的M ...
- 使用virtualenvwrapper模块管理python虚拟环境
1.pip安装virtualenvwrapper [root@localhost ~]# pip install virtualenvwrapper # 安装virtualenvwrapper [ro ...
- openwrt MT7628 编译前更改为DHCP,root 密码、ssid、时区、主机名
一.设置为DHCP动态获取ip地址 在:/home/OpenWrt/openwrt_CC_mt76xx_zhuotk_source/ 目录下,新建文件名/files/etc/config. 将配置好的 ...
- python计算文件的行数的方法
1.简单方法把文件读入一个大的列表中,然后统计列表的长度. count = len(open("文件名").readlines()) print count 2.读取文件某一行 ...
- [转] vue之computed和watch
计算属性 computed 侦听器or观察者 watch 一直以来对computed和watch一知半解,用的时候就迷迷糊糊的,今天仔细看了看文档,突然茅塞顿开,原来就是这么简单啊: computed ...
- MyString
[摘自C++程序设计语言] MyString.h #include <cstring> #include <iostream> #include <stdexcept&g ...
- Dapper结合Repository模式的应用
Dapper结合Repository模式的应用,包括如何在数据访问层(DAL)使用Dapper组件. Dapper在真实项目中使用,扩展IDbConnection的功能,支持Oracle.MS SQL ...
- java_ATM_GUI
Test 界面: import java.awt.Menu; import java.io.BufferedReader; import java.io.File; import java.io.Fi ...
- for in和for of的区别(转)
原文链接:https://www.jianshu.com/p/c43f418d6bf0 1 遍历数组通常用for循环 ES5的话也可以使用forEach,ES5具有遍历数组功能的还有map.filte ...