基于Docker的MongoDB實現(xiàn)授權訪問的方法
基于Docker部署一個數(shù)據(jù)庫實例通常比直接在服務器上安裝數(shù)據(jù)庫還要簡單,Gevin在開發(fā)環(huán)境中經常使用基于docker的數(shù)據(jù)庫服務,docker也漸漸成為Gevin在Linux上安裝MongoDB的首選方式,由于MongoDB默認是不用通過認證就能直接連接的,出于安全考慮,在公網(wǎng)上部署MongoDB時,務必設置authentication機制,以避免類似 "黑客贖金" 問題的發(fā)生。
那么,基于Docker拉起的MongoDB,如何實現(xiàn)通過用戶名密碼訪問指定數(shù)據(jù)庫呢?方法很簡單,但前提是要了解MongoDB授權訪問的機制,參考資料如下:
Enable Auth
Authentication
Role-Based Access Control
只要了解MongoDB授權訪問機制,直接按下面步驟一步步執(zhí)行就可以了。
1、創(chuàng)建MongoDB實例
為了少寫幾個命令,Gevin使用Docker Compose來創(chuàng)建MongoDB實例:
version: '2' services: mongo: # restart: always image: mongo:3.2 command: [--auth] ports: - "37017:27017" volumes: - /data/db
運行如下命令:
docker-compose up -d #---------- # Result: #---------- # Creating mongodb_mongo_1 docker-compose ps #---------- # Result: #---------- # Name Command State Ports # -------------------------------------------------------------------------- # mongodb_mongo_1 /entrypoint.sh --auth Up 0.0.0.0:37017->27017/tcp
2、創(chuàng)建用戶管理員
首先要進入MongoDB容器內部,連上MongoDB,并切換到 admin 數(shù)據(jù)庫,這步可以通過下面命令完成:
docker exec -it mongodb_mongo_1 mongo admin #---------- # Result: #---------- # MongoDB shell version: 3.2.12 # connecting to: admin # Welcome to the MongoDB shell. # For interactive help, type "help". # For more comprehensive documentation, see # http://docs.mongodb.org/ # Questions? Try the support group # http://groups.google.com/group/mongodb-user
然后創(chuàng)建一個user administrator:
db.createUser({ user: 'mongo-admin', pwd: 'admin-initial-password', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] }); #---------- # Result: #---------- Successfully added user: { "user" : "mongo-admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
3、創(chuàng)建訪問指定數(shù)據(jù)庫的用戶
創(chuàng)建了user administrator后,需要退出mongodb,并重新連接,然后用user administrator 訪問admin數(shù)據(jù)庫,并為目標數(shù)據(jù)庫創(chuàng)建目標用戶,其具體步驟如下:
(1)重新連接MongoDB數(shù)據(jù)庫
退出容器,重新用下面命令進入容器即可:
docker exec -it mongodb_mongo_1 mongo admin #---------- # Result: #---------- MongoDB shell version: 3.2.12 connecting to: admin
(2)授權登錄admin
db.auth("mongo-admin","admin-initial-password")
(3)創(chuàng)建訪問指定數(shù)據(jù)庫的用戶
# Step1: switch to the specified database: use octblog # Step2: create a user db.createUser( { user: "gevin", pwd: "gevin", roles: [ { role: "readWrite", db: "octblog" }, { role: "readWrite", db: "octblog-log" } ] } ) #---------- # Result: #---------- #Successfully added user: { # "user" : "gevin", # "roles" : [ # { # "role" : "readWrite", # "db" : "octblog" # }, # { # "role" : "readWrite", # "db" : "octblog-log" # } # ] #}
這一步的目標是為 octblog 這個數(shù)據(jù)庫創(chuàng)建一個授權訪問用戶,首先要從 admin 數(shù)據(jù)庫切換到 octblog 數(shù)據(jù)庫,然后才能為 octblog 添加授權訪問用戶
注:
上面所以操作均為user administrator執(zhí)行的,即第二步創(chuàng)建的 mongo-admin user administrator的作用是管理用戶,MongoDB下的每個數(shù)據(jù)庫,用戶都被它管理,除此外,它基本沒什么更多權限做其他事情MongoDB沒有通常意義的超級用戶的概念,octblog的授權用戶只能被user administrator創(chuàng)建,而user administrator只能登陸admin數(shù)據(jù)庫,所以才會有上面(2)、(3)兩步的麻煩。
以上所述是小編給大家介紹的基于Docker的MongoDB實現(xiàn)授權訪問的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關文章
在Ubuntu上使用Grafana監(jiān)控Docker的方法
如今越來越多的公司開始使用Docker,一談起Docker總是會跟著讓人聯(lián)想到輕量這個詞,甚至會有一種通過Docker啟動一個服務會節(jié)省很多資源的錯覺。然而Docker的「輕」也只是相對于傳統(tǒng)虛擬機而已。Docker如何監(jiān)控呢?本文就給大家介紹在Ubuntu上如何使用Grafana監(jiān)控Docker。2016-12-12docker操作Permission denied無權限的問題解決
我們日常需要docker環(huán)境進入容器配置或查看一些文件,本文主要介紹了docker操作Permission denied無權限的問題解決,具有一定的參考價值,感興趣的可以了解一下2024-06-06在CentOS 7 上為docker配置端口轉發(fā)以兼容firewall的解決方法
這篇文章主要介紹了在CentOS 7 上為docker配置端口轉發(fā)以兼容firewall的解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07Docker遇到Intellij IDEA,Java開發(fā)提升了十倍生產力
這篇文章主要介紹了Docker遇到Intellij IDEA,Java開發(fā)提升了十倍生產力,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10多云環(huán)境下的Docker部署策略實現(xiàn)
在多云環(huán)境下,Docker容器技術為應用程序的部署提供了高度的靈活性和可擴展性,本文就來介紹一下多云環(huán)境下的Docker部署策略實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-01-01docker?創(chuàng)建容器時指定容器ip的實現(xiàn)示例
在實際部署中,我們需要指定容器ip,本文主要介紹了docker?創(chuàng)建容器時指定容器ip,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12