更好的连接

由于JFinal插件和Resty插件等都是继承MongoPlugin这个类,所以下面这些方法使用起来都是一样的。

连接副本集(不会搭建副本?狂戳我获得北大绿卡一本(づ ̄ 3 ̄)づ)

plugin.add(主机地址,端口号);
plugin.add(主机地址,端口号).add(主机地址,端口号).add(主机地址,端口号);

登录数据库(默认是sha1)

plugin.auth(用户名,密码);

更多认证

plugin.authCR(String username, String password);
plugin.authX509(String x509)

SSL连接

plugin.ssl();

设置连接超时时间

plugin.connectTimeout(时间);

更多设置

plugin.opition(原生驱动的MongoClientOptions);

读写分离

plugin.readPreference();
//首选从节点,大多情况下读操作在从节点,特殊情况(如单主节点架构)读操作在主节点

更多策略的读写分离

plugin.readPreference(原生驱动的ReadPreference);

安全写入

plugin.writeConcern();
//前几次修改操作仍然被记录在journal中,可以被还原也可以被撤销,避免数据不一致或弄脏的情况,写成功后再执行到真的数据集中。MongoDB2.6后默认开启了此功能。

更多安全写入策略

plugin.writeConcern(原生驱动的WriteConcern);

最严格的安全写入

plugin.writeSafe();
//有些文章或教程推荐这么做,不过官方并不推荐,会影响性能。

最佳实践(获取更多使用建议

plugin.add(主机地址,端口号).add(主机地址,端口号).add(主机地址,端口号).setDatabase("test").auth(用户名,密码).ssl().readPreference().writeConcern();
//非公网连接可以不用SSL

安全建议

  • 启用安全认证

请开启安全认证,生成root用户和数据库对应的readWrite用户。

  • 不要把生产环境的数据库暴露在互联网上

  • 使用防火墙

防火墙的使用可以限制允许哪些实体连接MongoDB服务器。最佳的措施就是仅仅允许你自己的应用服务器访问数据库。如果你把服务部署在亚马逊web服务 (AWS)上,你可以使用"安全组“功能限制访问权限。如果你把服务部署在不支持防火墙功能的提供商的主机上,那么你可以亲自使用"iptables"对 服务器进行简单的配置。请参考mongodb的文档,实现对你所面对的具体环境配置iptables。

  • 使用key文件建立复制服务器集群

指定共享的key文件,启用复制集群的MongoDB实例之间的通信。如下给配置文件中增加keyfile参数。复制集群里的所有机器上的这个文件的内容必须相同。

  • 禁止HTTP状态接口

默认情况下Mongodb在端口28017上运行http接口,以提供“主”状态页面。在生产环境下推荐不要使用此接口,最好禁止这个接口。使用"nohttpinterface"配置设置可以禁止这个http接口。

  • 禁止REST接口

在生产环境下建议不要启用MongoDB的REST接口。这个接口不支持任何认证。默认情况下这个接口是关闭的。如果你使用的"rest"配置选项打开了这个接口,那么你应该在生产系统中关闭它。

  • 配置bind_ip

如果你的系统使用的多个网络接口,那么你可以使用"bind_ip"选项限制mongodb服务器只在与该配置项关联的接口上侦听。默认情况下mongoDB绑定所有的接口。

  • 启用SSL

如果你没有使用SSL,那么你在MongoDB客户端和MongoDB服务器之间的传输的数据就是明文的,容易受到窃听、篡改和“中间人”攻击。如果你是通过像internet这样的非安全网络连接到MongoDB服务器,那么启用SSL就显得非常重要。

  • 基于角色进行认证

MongoDB支持基于角色的认证,这样你就可以对每个用户可以执行的动作进行细粒度的控制。使用基于角色的认证组建可以限制对数据库的访问,而不是所有的用户都是管理员。更多的信息请参考有关角色的文档。

  • 企业级MongoDB与kerberos

企业级MongoDB继承了kerberos认证。有关这方面的更多信息请参考mongodb文档。基于用户名/密码的系统本身就是不安全的,因此如果可能的话,请使用基于kerberos的认证。

  • baby独家建议

现在很多安全厂商都支持安全组的概念,建议在生成环境下给MongoDB服务器加个只允许内网访问的安全组即可。

results matching ""

    No results matching ""