1、docker mongo
1.1、docker pull mongo
1.2、docker run --name mongo -p 27017:27017 -d mongo --auth
1.3、進入bash:docker exec -it mongo bin/bash
1.4、mongo目錄:/usr/bin/ 程序名:./mongo
2、創建帳戶
mongo --port 27017 use admin db.createUser( { user: "root", pwd: "123456", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
管理員創建成功,現在擁有了用戶管理員
用戶名:root
密碼:123456
數據庫:admin
3、配置springboot
data:
mongodb:
# uri: mongodb://foo:123456@192.168.56.101:27017/foo
uri: mongodb://192.168.56.101:27017/admin
username: root
password: 123456
1. 禁止公網訪問 Mongodb 端口
1.1 網絡配置
由於網絡配置因人而異,需要根據自己實際環境進行配置,不作冗述。大致可以從以下方面禁止。
- 在路由器中關閉端口轉發
- 防火牆 iptables 禁止訪問
1.2 驗證端口能否訪問方式
在外網機器命令行中運行
telnet your.machine.open.ip 27017
2. 啟用驗證
2.1 創建用戶管理員賬戶
新建MongoDB服務:
mongod --port 27017 --dbpath /data/db1
開啟mongodb客戶端shell:
mongo --port 27017 use admin db.createUser( { user: "adminUser", pwd: "adminPass", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
管理員創建成功,現在擁有了用戶管理員
用戶名:adminUser
密碼:adminPass
然后,斷開 mongodb 連接, 關閉數據庫
2.2 Mongodb 用戶驗證登陸
啟動帶訪問控制的 Mongodb
mongod --auth --port 27017 --dbpath /data/db1
現在有兩種方式進行用戶身份的驗證
- 第一種 (類似 MySql)
客戶端連接時,指定用戶名,密碼,db名稱
mongo --port 27017 -u "adminUser" -p "adminPass" --authenticationDatabase "admin"
- 第二種
客戶端連接后,再進行驗證
mongo --port 27017 use admin db.auth("adminUser", "adminPass") // 輸出 1 表示驗證成功
2.3 創建普通用戶
過程類似創建管理員賬戶,只是 role 有所不同
use foo db.createUser( { user: "simpleUser", pwd: "simplePass", roles: [ { role: "readWrite", db: "foo" }, { role: "read", db: "bar" } ] } )
現在我們有了一個普通用戶
用戶名:simpleUser
密碼:simplePass
權限:讀寫數據庫 foo, 只讀數據庫 bar。
注意
use foo表示用戶在 foo 庫中創建,就一定要 foo 庫驗證身份,即用戶的信息跟隨隨數據庫。比如上述 simpleUser 雖然有 bar 庫的讀取權限,但是一定要先在 foo 庫進行身份驗證,直接訪問會提示驗證失敗。
use foo db.auth("simpleUser", "simplePass") use bar show collections
2.4 內建角色
- Read:允許用戶讀取指定數據庫
- readWrite:允許用戶讀寫指定數據庫
- dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile
- userAdmin:允許用戶向system.users集合寫入,可以找指定數據庫里創建、刪除和管理用戶
- clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和復制集相關函數的管理權限。
- readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限
- readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限
- userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限
- dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。
- root:只在admin數據庫中可用。超級賬號,超級權限
3、
