zoukankan      html  css  js  c++  java
  • 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的实现机制,这里是不能直接使用常量值;

  • 相关阅读:
    http://www.cnblogs.com/Javame/p/3632473.html
    在eclipse中新建Dynamic web project时选择2.5和3.0的区别(里面涉及servlet和tomcat的问题)
    图的理解:深度优先和广度优先遍历及其 Java 实现
    解决ORA-28000: the account is locked
    [MAT]使用MAT比較多个heap dump文件
    ansible学习之--简单学习笔记1
    awk基本使用方法简单介绍
    已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行
    程序实践系列之库源码
    Android常见UI组件之ListView(二)——定制ListView
  • 原文地址:https://www.cnblogs.com/wufengtinghai/p/15114316.html
Copyright © 2011-2022 走看看