Docker Mongo數據庫開啓用戶認證

 

1、啓動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數據庫mysql

 

2、如何開啓mongo容器密碼認證

在運行時,增長--auth參數,用簡化版來做爲示例web

docker run --name mongo1 -p 21117:27017 -d mongo --noprealloc --smallfiles --auth

 

3、關於mongo用戶認證

mongodb密碼和傳統數據如mysql等有些區別:sql

  1. mongodb的用戶名和密碼是基於特定數據庫的,而不是基於整個系統的。全部全部數據庫db都須要設置密碼

 

mongodb設置管理用戶和密碼: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步的 管理員帳戶登陸,用該帳戶建立其餘數據庫管理員帳號docker

use admin
db.auth("useradmin", "adminpassword")

 

新建你須要管理的mongodb 數據的帳號密碼數據庫

use yourdatabase

db.createUser({ user: "youruser", pwd: "yourpassword", roles: [{ role: "dbOwner", db: "yourdatabase" }] })

注:dbOwner 表明數據庫全部者角色,擁有最高該數據庫最高權限。bash

 

新建數據庫讀寫帳戶app

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')

 

 

4、實例演示

啥?你還不會,那我接下來,給你們演示一下吧

 

一、新建容器,並開啓--auth

docker run --name mongo1 -p 21117:27017 -d mongo --noprealloc --smallfiles --auth

 

二、進入容器,操做

#進入容器
docker exec -it mongo1 bash

#進入Mongo
mongo

#切庫,新增用戶
use admin;

db.createUser({ user: "root", pwd: "mongo", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })

 

三、認證驗證

 

方式一,在mongo中可用db.auth()認證

db.auth('root','mongo')

 

方式二:退出mongo後,從新進入

能夠先直接mongo進入,而後show dbs,發現報錯

 

認證進入:mongo admin -u root -p mongo

 

 

方式三:Robo客戶端工具鏈接

若是不認證,直接鏈接測試,提示失敗

認證後,從新測試鏈接:

 

四、再來新建一個其它數據庫的用戶

 

#新建庫
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開啓用戶認證~ 

相關文章
相關標籤/搜索