一、啟動mongo容器的幾種方式
#簡化版
docker run --name mongo1 -p 21117:27017 -d mongo --noprealloc --smallfiles
#自定義mongo數據路徑
docker run --name mongo_rs1 -v ~/test/mongo_sr1:/mongodb -p 37117:27017 -d mongo mongod --logpath /mongodb/mongo.log --logappend --dbpath /mongodb
#開啟mongo雙主配置
docker run --name mongo_rs2 -v ~/test/mongo_sr2:/mongodb -p 37118:27017 -d mongo mongod --logpath /mongodb/mongo.log --logappend --dbpath /mongodb --master --slave --port=27017 --autoresync --source=192.168.118.73:37117
#常規,用mongo默認數據路徑,並掛載出來
docker run --name mongodb_alpha -d --dns=192.168.1.26 -p 37017:27017 -v /home/devsa_dev/mongo_data/configdb:/data/configdb -v /home/devsa_dev/mongo_data/db:/data/db mongo
而按照上述幾種方式啟動的Mongo容器,默認是不帶密碼訪問的,也就是說,只有別人知道你的ip和映射出來的端口,即可操作你的mongo數據庫
二、如何開啟mongo容器密碼認證
在運行時,增加--auth參數,用簡化版來作為示例
docker run --name mongo1 -p 21117:27017 -d mongo --noprealloc --smallfiles --auth
三、關於mongo用戶認證
mongodb密碼和傳統數據如mysql等有些區別:
- mongodb的用戶名和密碼是基於特定數據庫的,而不是基於整個系統的。所有所有數據庫db都需要設置密碼
mongodb設置管理用戶和密碼:
show dbs
在mongodb新版本里並沒有admin數據庫,但是並不妨礙第2步操作。
#進入admin數據庫
use admin
#創建管理員賬戶 db.createUser({ user: "useradmin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] }) mongodb中的用戶是基於身份role的,該管理員賬戶的 role是 userAdminAnyDatabase。 ‘userAdmin’代表用戶管理身份,’AnyDatabase’ 代表可以管理任何數據庫。 #驗證第3步用戶添加是否成功 db.auth("useradmin", "adminpassword") 如果返回1,則表示成功。
進入mongodb,用第3步的 管理員賬戶登錄,用該賬戶創建其他數據庫管理員賬號
use admin
db.auth("useradmin", "adminpassword")
新建你需要管理的mongodb 數據的賬號密碼
use yourdatabase db.createUser({ user: "youruser", pwd: "yourpassword", roles: [{ role: "dbOwner", db: "yourdatabase" }] })
注:dbOwner 代表數據庫所有者角色,擁有最高該數據庫最高權限。
新建數據庫讀寫賬戶
use yourdatabase db.createUser({ user: "youruser2", pwd: "yourpassword2", roles: [{ role: "readWrite", db: "yourdatabase" }] })
注:該用戶用於該數據的讀寫,只擁有讀寫權限。
內建角色
- Read:允許用戶讀取指定數據庫
- readWrite:允許用戶讀寫指定數據庫
- dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile
- userAdmin:允許用戶向system.users集合寫入,可以找指定數據庫里創建、刪除和管理用戶
- clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和復制集相關函數的管理權限。
- readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限
- readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限
- userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限
- dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。
- root:只在admin數據庫中可用。超級賬號,超級權限
Mongodb 用戶驗證登陸
第一種 (類似 MySql)
客戶端連接時,指定用戶名,密碼,db名稱
mongo --port 27017 -u "adminUser" -p "adminPass" --authenticationDatabase "admin"
第二種
客戶端連接后,再進行驗證
mongo --port 27017
use admin
db.auth("adminUser", "adminPass")
// 輸出 1 表示驗證成功
第三種:
進入容器中
mongo admin -u username -p passwd
URI 形式的訪問
生產中常用 URI 形式對數據庫進行連接
mongodb://your.db.ip.address:27017/foo
添加用戶名密碼驗證
mongodb://simpleUser:simplePass@your.db.ip.address:27017/foo
實例:
#形式一
connect(host='mongodb://root:mongo@172.20.10.144:37017/ppmoney_website_minder')
#形式二
connect(host='mongodb://root:mongo@172.20.10.144:37017/db?authSource=ppmoney_website_minder')
四、實例演示
啥?你還不會,那我接下來,給大家演示一下吧
1、新建容器,並開啟--auth
docker run --name mongo1 -p 21117:27017 -d mongo --noprealloc --smallfiles --auth
2、進入容器,操作
#進入容器 docker exec -it mongo1 bash #進入Mongo mongo #切庫,新增用戶 use admin; db.createUser({ user: "root", pwd: "mongo", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
3、認證驗證
方式一,在mongo中可用db.auth()認證
db.auth('root','mongo')
方式二:退出mongo后,重新進入
可以先直接mongo進入,然后show dbs,發現報錯
認證進入:mongo admin -u root -p mongo
方式三:Robo客戶端工具連接
如果不認證,直接連接測試,提示失敗
認證后,重新測試連接:
4、再來新建一個其它數據庫的用戶
#新建庫 use ppmoney_website_minder #新建用戶 db.createUser( ... { ... user: "root", ... pwd: "mongo", ... roles: [ { role: "readWrite", db: "ppmoney_website_minder" }, ] ... } ... ) #認證 db.auth('root','mongo') #插入數據 db.runoob.insert({"name":"ppmoney_website_minder"})
用Mongo客戶端連接驗證:
到此,就給大家演示了一下,如何對mong開啟用戶認證~