MongoDB 3.6 Authentication IP Restrictions

前言

好了,看了这个标题,我不知道你有没有一种潜意识,如果有,没错,那就是这个了,MongoDB 终于开放了我觉得对于一个数据库的安全来说,比较重要的一个模块了 --- IP 白名单。

众所周知,MySQL、Oracle、SqlServer等知名的数据库都是有在安全方面作出相当的防护的。

  • IP白名单
  • 针对库、表的权限区分
  • 针对不同的增删改查、事务、admin等的权限分配
  • 甚至于Oracle还提供了针对于不同权限所组合而成的逻辑角色,MySQL在这方面也做了相应的调整。

但是回过头来看看MongoDB,从最一开始的最最简单的用户名+密码的方式,到了之后引入了Bult-in Role、Custom Role、Privilege等的概念推出,再到即将推出的3.6中,明确了将bind_ip调整成了localhost,这也是受比特币案的影响吧。

这一次,3.6中,新加入了authenticationRestrictions,就是用来解决IP白名单的缺陷。

那么接下来就让我们一起来看一下,这个非常吸引我的特性是如何实现的吧。

讲道理

首先还是先来看看MongoDB的官方文档吧。https://docs.mongodb.com/master/reference/method/db.createUser/#authentication-restrictions

Field Name Value Description
clientSource Array of IP addresses and/or CIDR ranges If present, when authenticating a user, the server verifies that the client’s IP address is either in the given list or belongs to a CIDR range in the list. If the client’s IP address is not present, the server does not authenticate the user.
serverAddress Array of IP addresses and/or CIDR ranges A list of IP addresses or CIDR ranges to which the client can connect. If present, the server will verify that the client’s connection was accepted via an IP address in the given list. If the connection was accepted via an unrecognized IP address, the server does not authenticate the user.

简单来说,clientSource 就是针对客户端的IP 做白名单控制。serverAddress 就是针对服务端的IP 做白名单控制。

那么这里问题来了,客户端IP 好理解,无非就是哪里连过来的连接么,这和我们理解上的都一致,那么服务端地IP呢?什么意思?这里,服务端的IP 指的是客户端在连接过来的时候指定的host 地址,比如:mongo --host=192.168.56.101,那么serverAddress 就必须包含192.168.56.101,这里的包含是什么意思?和MySQL一样,同样可以指定B、C网段,来达到多个地址地开放,只是写法有些许出入,MySQL中是:192.168.56.*,MongoDB 中是:192.168.56.0/24。那么如果是使用驱动的话,也是一样的,在host参数中指定对应的IP即可。

那么接下来我们就来操作一把。

摆事实

1.创建一个应用账号miracle

use admin

db.createUser(
   {
     user: "root",
     pwd: "root",
     roles: [{role: ‘root‘, db: ‘admin‘} ]
   }
)

db.createUser(
   {
     user: "miracle",
     pwd: "young",
     roles: [ {role: ‘readWrite‘, db: ‘young‘} ],
     authenticationRestrictions: [ {
        clientSource: ["192.168.31.246"],
        serverAddress: ["192.168.31.246"]
     } ]
   }
)

2.重启数据库,开启权限认证

3.进入miracle 数据库,并验证

4.使用符合要求的格式重新连接数据库

5.第四步中出错的原因是因为默认3.6 开启了bind_ip=localhost,而由于一开始忽略了这个问题,折腾了我好久。重启数据库加上--bind_ip_all

6.重新连接

总结

至此,MongoDB的IP白名单功能验证完毕,希望能够帮助到大家在实际的维护中更安全的控制好开发者的权限。



我是上海小胖[MiracleYoung],专注MongoDB、MySQL、Redis等开源数据库的 DevOps,拥抱开源,接受收费。

上海小胖[MiracleYoung] 原创地址: https://segmentfault.com/u/shanghaixiaopang/articles

联系方式:[email protected]

欢迎各位大神前来评论。

每周五,敬请期待,上海小胖[MiracleYoung] 独更。

如果夏雨荷还在大明湖畔等着我的话,我就不更了。

时间: 2024-10-23 11:39:12

MongoDB 3.6 Authentication IP Restrictions的相关文章

WinServer-IIS-Dynamic IP Restrictions

动态IP限制 来自为知笔记(Wiz)

Linux系统中备份和恢复MongoDB数据的教程

版本:mongodb3.2.6 备份格式: /data/mongodb/bin/mongodump -h IP --port 端口号 -u 用户 -p 密码-d 数据库名-o 存储路径 恢复格式: /mnt/mongodb/bin/mongorestore -h IP --port 端口号 -u 用户名-p密码  -d 数据库名 备份的文件夹名/* 注意,如果mongodb开启了认证登录,那么需要加参数--authenticationDatabase=admin, 因为笔者使用的mongodb开

centos 装mongodb

From https://www.linode.com/docs/databases/mongodb/use-mongodb-to-store-application-data-on-centos-5 Use MongoDB to Store Application Data on CentOS 5 Updated Friday, April 29th, 2011 by Linode This guide has been deprecated and is no longer being ma

MongoDB学习笔记(一)

最近有些时间,就抽空研究了一下MongoDB,我以前经常使用关系型数据库,如Oracle.MySQL,对MongoDB只是有些很肤浅的了解,最近下决心要好好研究一下,主要的参考书有两本:<MongoDB 大数据处理权威指南(第二版)>.<MongoDB权威指南(第一版)>,后者的版本比较旧,但基本还可以用,基本的操作方式基本上差不多.我主要参考的是第一个本书,相对来说,第一本书比较简单,但入门比较容易,还带有PHP和Python的操作MongoDB的指南. 1.安装:MongoDB

Linux下PHP安装配置MongoDB数据库连接扩展

说明: 操作系统:CentOS 5.X 64位 MongoDB数据库服务器: IP地址:192.168.21.130 Web服务器: IP地址:192.168.21.127 PHP安装路径:/usr/local/php 实现目的: 安装PHP的MongoDB数据库扩展,通过PHP程序连接MongoDB数据库 具体操作: 一.安装PHP的MongoDB数据库扩展(在Web服务器192.168.21.127上操作) 下载地址:http://pecl.php.net/get/mongo-1.5.1.t

Mongodb集群部署ReplicaSet+Sharding -摘自网络

网上关于三种集群方式的搭建方式很多,都是分开来介绍的.Replica Set (复制集成)主要是做主从库的,但是没法实现负载均衡的效果,真正实现这个的,是Sharding(分片集群),通过数据分布在每个分片上而实现.所以,如果只用分片,如果一个只有一个主库,那么挂了就真的挂了.所以在我尝试的集群部署采用的Replica Set+Sharding的方式.OS是Redhat_x64系统,客户端用的是Java客户端.Mongodb版本是mongodb-linux-x86_64-2.4.9.tgz. 要

Mongodb主、副、仲裁节点集群安装

mongodb 的集群方式主要分为三种Replica Set / Sharding / Master-Slaver ,这里只说明最简单的集群搭建方式(生产环境),如果有多个节点可以此类推或者查看官方文档. Replica Set 中文翻译叫做副本集.其实简单来说就是集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据需要和主节点一致.如下图: Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点.主备节点存储数据(M,

MongoDB学习笔记——数据库安装及配置

MongoDB数据库安装 MongoDB官方下载地址:https://www.mongodb.com/download-center 首先需要根据Windows版本选择正确的MongoDB版本进行安装,可以在命令行中输入以下指令检查Windows版本: wmic os get osarchitecture 32 位版本的 MongoDB 只支持 2G 以下的数据库,只适用于测试及评估. 点击下载下来的安装文件进行MongoDB数据库安装,如:mongodb-win32-x86_64-2008pl

Mongodb集群搭建的三种方式

Mongodb是时下流行的NoSql数据库,它的存储方式是文档式存储,并不是Key-Value形式.关于Mongodb的特点,这里就不多介绍了,大家可以去看看官方说明:http://docs.mongodb.org/manual/ 今天主要来说说Mongodb的三种集群方式的搭建:Replica Set / Sharding / Master-Slaver.这里只说明最简单的集群搭建方式(生产环境),如果有多个节点可以此类推或者查看官方文档.OS是Ubuntu_x64系统,客户端用的是Java客