開啟docker中的mongodb認證授權


前言:

開啟MongoDB服務后,默認是沒有權限驗證的。直接通過IP加端口就可以遠程訪問數據庫,並對數據庫進行任意操作。下面介紹一下如何開啟docker中MongoDB的權限認證。

安裝完MongoDB服務后默認有一個admin數據庫,此時admin數據庫是空的,沒有記錄任何權限相關的信息。當admin.system.users一個用戶都沒有時,即使MongoDB啟動時添加了--auth參數,如果沒有在admin數據庫中添加用戶,此時不進行任何認證還是可以做任何操作(不管是否以--auth參數啟動),直到在admin.system.users中添加一個用戶。因此要開啟MongoDB的權限認證需要滿足兩點條件:

admin.system.users中添加用戶
MongoDB以--auth啟動

實踐
進入相應的docker容器:

docker exec -it 容器ID /bin/bash

進入MongoDB交互式命令行並切換到admin數據庫

mongo


use admin

MongoDB自帶一個數據庫叫admin,可以在這個數據庫中創建管理員賬號。

所有創建的用戶都會存儲在system.users集合中。

db.getCollectionNames()
// [ "system.users", "system.version" ]

創建管理員,賦予root權限

db.createUser({user:"admin",pwd:"xiiasdfiik34",roles:[{role: 'root', db: 'admin'}]})
/*
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
*/

認證當前用戶管理員

db.auth('admin', 'xiiasdfiik34') // 返回1 就是認證成功

創建普通用戶
切換到目標數據庫:

use test_db

創建用戶角色,並賦予讀寫權限

db.createUser({
user: 'test_user',
pwd: 'vfeqwerfd4334',
roles: [{role: 'readWrite', db: 'test_db'}]
})
/*
Successfully added user: {
"user" : "test_user",
"roles" : [
{
"role" : "readWrite",
"db" : "test_db"
}
]
}
*/

認證試試:

db.auth('test_user', 'vfeqwerfd4334')

注意:
用戶只能在創建該用戶時所在的數據庫進行認證。認證成功后,就可以對該數據庫執行權限范圍內的操作。

修改MongoDB的docker-compose.yml,指定帶認證啟動

yikaoyan-mongodb:
image: mongo:latest
volumes:
- ./data/db:/data/db
ports:
- 27017:27017
command: [--auth] # 指定需要認證

重啟MongoDB docker容器后,認證就生效了。

連接數據庫時,指定用戶和密碼

mongodb_uri = 'mongodb://test_user:vfeqwerfd4334@localhost/test_db?authSource=test_db&authMechanism=SCRAM-SHA-1'

MongoDB連接URL可以參考:https://api.mongodb.com/python/current/examples/authentication.html

其他命令:

刪除用戶:db.dropUser('username')

 

MongoDB 目前內置了 7 個角色。

數據庫用戶角色:read、readWrite;
數據庫管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
備份恢復角色:backup、restore;
所有數據庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超級用戶角色:root;這里還有幾個角色間接或直接提供了系統超級用戶的訪問(dbOwner 、userAdmin、userAdminAnyDatabase)
內部角色:__system
這些角色對應的作用如下:

Read:允許用戶讀取指定數據庫
readWrite:允許用戶讀寫指定數據庫
dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile
userAdmin:允許用戶向system.users集合寫入,可以找指定數據庫里創建、刪除和管理用戶
clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和復制集相關函數的管理權限。
readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限
readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限
userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限
dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。
root:只在admin數據庫中可用。超級賬號,超級權限


MongoDB連接URL可以參考:https://api.mongodb.com/python/current/examples/authentication.html

參考:https://blog.csdn.net/Ayhan_huang/article/details/89252169

       https://blog.csdn.net/kwame211/article/details/96316498


免責聲明!

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



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