• Mongodb集成LDAP授权


    一、环境简介

    Mongodb enterprise v4.0.16

    OpenLDAP v2.4.44

    二、Mongodb集成LDAP的授权过程

    1. 客户端指定某种外部验证方式链接Mongodb;
    2. Mongodb根据配置中设置的ip、用户、密码等来绑定LDAP服务器;
    3. Mongodb根据配置的查询模板构建查询语句,并向LDAP服务器发送请求获得验证用户所属的用户组信息;
    4. LDAP服务器执行查询并返回用户组的信息;
    5. Mongodb在admin数据库中查找跟用户组对应的role,并对应的权限授权给当前用户;
    6. 客户端在授权的数据库上进行操作;

    三、配置过程

    在LDAP服务器新建用户mongodb

    image

    在LDAP服务器中新建dbrole组,并通过memberUid进行关联,这里需要填写用户的全限定名

    image

    在mongod.conf中新增LDAP的配置

    security:
        ldap:
            servers: "192.168.32.15:389"
            authz:
                queryTemplate: "dc=mango,dc=com?cn?sub?(&(objectClass=posixGroup)(memberUid={USER}))"
            bind:
                queryUser: "cn=root,dc=mango,dc=com"
                queryPassword: "mango"
                method: "simple"
    

    重启mongdb服务

    systemctl restart mongod
    

    在mongodb的admin数据库中新建角色

    use admin
     
    db.createRole({
      "role" : "dbrole",
      "privileges" : [],
      "roles" : [{
          "role" : "dbOwner",
          "db" : "test"
        }]
    })
    

    使用mongodb shell连接数据库

     mongo --username uid=mongodb,ou=db,dc=mango,dc=com --password mangodb --authenticationMechanism PLAIN --authenticationDatabase  '$external'
    

    四、security.ldap.authz.queryTemplate查询语法

    首先这个查询模板是LDAP server执行的,所以其最终是满足LDAP的查询语法;

    [ dn  [ ? [attributes] [ ? [scope] [ ? [filter] [ ? [Extensions] ] ] ] ] ]
    

    dn:定义查询开始的基点对象;

    attributes:定义返回命中的条目的哪个字段;如果不定义则返回条目对应的dn;

    scope:进一步控制相对基点的搜索范围,可以取值one、sub、base;

    filter:定义过滤条件,LDAP有自己的一套语法;

    具体的查询语法,网上已经比较多,这里只简单介绍一下mongod.config里配置的查询语句

    dc=mango,dc=com?cn?sub?(&(objectClass=posixGroup)(memberUid={USER}))

    在dc=mango,dc=com的节点下,查找objectClass=posixGroup,同时memberUid=当前登录用户的节并返回节点的cn字段;

    这里的{USER}在查询之前,mongodb会将它替换为登录的用户id;基于当前版本的mongodb的实现机制,这里是不能直接使用常量值;

  • 相关阅读:
    万兆铜缆--七类双绞线--光纤等内容
    [51CTO]反客为主 ,Linux 成为微软 Azure 上最流行的操作系统
    [知乎]超线程对游戏来说真的没用吗?
    SQLSERVER2017 最新补丁发布方式
    MSTSC 修改端口的简单方法 3389
    使用WinSW 将 exe 创建成Windows下面 service的方法 (将nginx创建成 services)
    [时政]在美国,是参议院议长的权力大,还是众议院议长的权力大
    内网内使用https 和 使用http 建立连接的速度对比
    Windows下 OpenSSL的安装与简单使用
    [转发]VMware厚置备延迟置零 、 厚置备置零、精简置备 区别
  • 原文地址:https://www.cnblogs.com/wufengtinghai/p/15114316.html
Copyright © 2020-2023  润新知