zoukankan      html  css  js  c++  java
  • MongoDB 3.6用户白名单(转载)

     

    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] 原创地址: https://segmentfault.com/u/shanghaixiaopang/articles

  • 相关阅读:
    问:Linux下Chrome标题栏中文乱码
    通过printf设置Linux终端输出的颜色和显示方式
    连HTTPS都有漏洞,这么不安全的互联网我们还要继续用吗?
    为什么TCP连接不可靠
    TCP发送接口的返回值
    /proc/uptime详解
    Linux Kernel Version Numbering
    Understanding Linux /proc/cpuinfo
    Android Tips: Best Practices for Using Alpha
    如何让LinearLayout也有类似Button的点击效果?
  • 原文地址:https://www.cnblogs.com/xibuhaohao/p/12607010.html
Copyright © 2011-2022 走看看