微信号:infoqchina

介绍:有内容的技术社区媒体

为首次部署MongoDB做好准备:备份和安全

2014-05-14 21:08 InfoQ

在该系列的第一篇文章中,我们讨论了部署关系型数据库时使用的哪些概念、操作和过程可以直接应用到MongoDB上,同时还介绍了硬件选择以及部署和监控的最佳实践。

在该系列的第二篇文章中,我们将会介绍如何使用备份工具和安全策略保护你的部署。

MongoDB备份和恢复

备份MongoDB数据库常见的方式有三种:

  • 使用MongoDB管理服务(MMS)进行云备份

  • 使用文件系统快照

  • 使用MongoDB自身的mongodump工具

使用MongoDB管理服务(MMS)备份

除了上一篇文章提到的监控方法之外,MMS提供了一个管理全面的云备份解决方案,它托管在可靠、有冗余且安全的数据中心上。用户需要将MMS备份代理本地安装到MongoDB集群上并执行初始同步,在那之后加密和压缩的oplog数据(用于MongoDB复制集)会从备份代理流到MMS上。快照每6小时创建一次。

MMS备份是唯一一个支持复制集时间点恢复和分片集群整体快照的解决方案。过去24小时之内的oplog数据会被存储起来,你可以使用这些数据为一个复制集创建定制快照。对于分片集群,负载均衡每6小时会暂停一次,同时一个无操作令牌会被插入到所有分片、Mongos和配置服务器上。oplog能够被应用到集群中的所有复制集上(直到令牌插入的那个点),为整个集群提供了一个一致的快照。

恢复数据的时候,你可以通过SCP直接将数据发送到你的服务器上,或者可以通过生成的自定义URL下载它们。MMS需要对所有恢复进行双重认证。

文件系统备份

文件系统备份,例如Linux LVM提供的方式,我们可以快速有效地创建一个文件系统的一致性快照,然后复制该快照用于数据的备份或者恢复。

mongodump

mongodump是与MongoDB捆绑在一起的一个工具,它能对MongoDB中的数据进行实时备份。我们可以使用mongodump dump整个数据库、集合或者一个查询的结果。mongodump可以通过dump oplog创建能够反映某个时间点数据的dump文件,然后通过mongorestore重放。mongodump还能处理不活动的数据库文件集。

纵深防护(Defense in Depth

纵深防护是安全的MongoDB部署推荐使用的方法,它有很多不同的方法可用于管理并降低风险。纵深防护的目的是把环境分层,确保系统中没有可以让侵入者或者不受信任的团体利用的错误点,从而使其无法获取到存储在MongoDB数据库中的数据。降低暴露风险最有效的方法就是让MongoDB运行在受信任的环境中,通过访问限制、遵循最小权限系统、遵循安全的部署生命周期、遵循最佳部署实践等方法实现良好的风险管控。

所有处理敏感信息的数据库都需要提供全面的安全防护机制,包括:

  • 通过用户权限管理限制对敏感数据的访问,通过认证和授权控制实现。

  • 记录数据库操作日志并对其进行审计。

  • 对需要通过网络传输的数据和存储在数据库中的数据进行加密保护。

  • 环境和流程控制。

MongoDB2.4引入的很多功能可以处理上面的需求,同时MongoDB 2.6将会继续提供这些功能。

认证

对访问MongoDB的实体进行认证的方式包括使用数据库本身的认证机制和集成外部的安全机制(包括MongoDB Enterprise 2.4Kerberos服务、LDAP以及Windows活动目录和MongoDB 2.6中新增的x.509证书认证)。

授权

MongoDB允许管理员定义一个应用程序或者用户应该拥有哪些权限,在执行查询的时候能够看到哪些数据。MongoDB拥有大量的内置角色,同时在MongoDB 2.6中用户能够配置细粒度的自定义角色。MongoDB 2.6提供了域级别的安全机制让用户能够对敏感数据进行细粒度的安全授权控制,同时能够定义在运行时实现的声明式安全策略。

审计

MongoDB2.6通过维护审计日志增加了对记录数据库管理操作的支持。为了便于使用,分布在一个MongoDB集群中的审计日志可以被合并到一个单独的log文件中,从而能够将由某个单独的操作产生且影响多个节点的事件关联起来。

加密

MongoDB能够对需要在网络间进行传输的数据和位于持久存储中的数据进行加密。

SSL的支持允许客户端通过加密通道连接到MongoDB。如果使用FIPS验证的Cryptographic模块在FIPS模式下运行,那么MongoDB还能支持FIPS 140-2加密。

有多种方式能对MongoDB中的数据进行加密。一种方式是在应用程序层使用合适且必要的加密类型对域级别的数据进行加密。

另一种方式是使用像NcryptFSLUKS这样的第三方类库,它们作为操作系统内核的一部分为Linux提供了磁盘级别的加密,它们所提供的高级管理功能可以确保只有得到授权的进程才能访问这些数据。对于Windows平台而言,可以使用像IBM Guardium数据加密、BitLocker驱动盘加密和TrueCrypt这样的技术。

查询注入

对于MongoDB客户端程序而言,它生成的查询为BSON对象,而不是字符串,所以传统的SQL注入攻击对将查询作为BSON对象提交的系统不会造成危险。

但是,有一些MongoDB操作允许对任意JavaScript表达式求值,这时候应该注意避免恶意表达式。

结论

MongoDB用户能够通过本文以及前一篇文章所讨论的最佳实践满足当今业务系统对维护高可用、安全和可扩展运营的需要。

更多精彩内容,请点击阅读原文。

***********************************

本文来自InfoQ微信公众账号:infoqchina

1、回复“今日新闻”,查看今天更新的新闻;

2、回复“今日英文”,查看今天英文站的更新;

3、回复“文章 +关键词”,搜索关键词相关内容;

4、回复“QCon”,了解QCon大会相关信息;

5、回复“活动”,了解最近InfoQ组织的线下沙龙;

6、回复“架构师”,获取《架构师》下载地址;

7、回复“投稿”,了解投稿和加入编辑团队的流程。

***********************************


 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 汽车之家运维团队倾力打造的配置管理系统AutoCMS 双12,最贵的是什么? 5个难以置信的Visual Studio 2015预览版新特性 IBM力挺Swift语言 携手苹果鏖战亚马逊云计算 TIOBE 2016年4月编程语言排行榜:Visual Basic即将出局