基于Docker的MongoDB實現授權訪問
基于Docker部署一個數據庫實例通常比直接在服務器上安裝數據庫還要簡單,Gevin在開發環境中經常使用基于docker的數據庫服務,docker也漸漸成為Gevin在Linux上安裝MongoDB的首選方式,由于MongoDB默認是不用通過認證就能直接連接的,出于安全考慮,在公網上部署MongoDB時,務必設置authentication機制,以避免類似 "黑客贖金" 問題的發生。
那么,基于Docker拉起的MongoDB,如何實現通過用戶名密碼訪問指定數據庫呢?方法很簡單,但前提是要了解MongoDB授權訪問的機制,參考資料如下:
只要了解MongoDB授權訪問機制,直接按下面步驟一步步執行就可以了。
1、創建MongoDB實例
為了少寫幾個命令,Gevin使用Docker Compose來創建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、創建用戶管理員
首先要進入MongoDB容器內部,連上MongoDB,并切換到 admin 數據庫,這步可以通過下面命令完成:
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
然后創建一個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、創建訪問指定數據庫的用戶
創建了user administrator后,需要退出mongodb,并重新連接,然后用user administrator 訪問admin數據庫,并為目標數據庫創建目標用戶,其具體步驟如下:
(1)重新連接MongoDB數據庫
退出容器,重新用下面命令進入容器即可:
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)創建訪問指定數據庫的用戶
# 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 這個數據庫創建一個授權訪問用戶,首先要從 admin 數據庫切換到 octblog 數據庫,然后才能為 octblog 添加授權訪問用戶
注:
- 上面所以操作均為user administrator執行的,即第二步創建的 mongo-admin
- user administrator的作用是管理用戶,MongoDB下的每個數據庫,用戶都被它管理,除此外,它基本沒什么更多權限做其他事情
- MongoDB沒有通常意義的超級用戶的概念,octblog的授權用戶只能被user administrator創建,而user administrator只能登陸admin數據庫,所以才會有上面(2)、(3)兩步的麻煩。
來自:http://blog.igevin.info/posts/docker-mongo-auth/
本文由用戶 BlakeLhotsk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!