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的實現機制,這里是不能直接使用常量值;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM