MongoDB安裝和配置
官網(wǎng)下載5.0.3, 并安裝. Windows下安裝后并選擇使用windows 服務(wù)來(lái)啟動(dòng)mongo服務(wù).
======================================
免密登錄
======================================
初次登錄, 打開 mongo.exe 客戶端, 不需要輸入用戶密碼就能登錄, 安全性不高, 后面介紹如何加上安全認(rèn)證.

在mongo.exe中執(zhí)行show dbs命令, 能顯示有三個(gè)數(shù)據(jù)庫(kù), 說(shuō)明登錄成功.

查看 mongo 的配置文件mongod.cfg
注意默認(rèn)綁定IP 是127.0.0.1, 如果要在局域網(wǎng)內(nèi)訪問(wèn)mongo服務(wù), 需要修改IP為 0.0.0.1, 即綁定所有的網(wǎng)卡.

======================================
創(chuàng)建賬號(hào)
======================================
創(chuàng)建一個(gè)mongoDB 的超級(jí)管理員root賬號(hào)
先切到admin db下, 賬號(hào)名設(shè)定為 root, 角色也選 root.
use admin db.createUser({user:'root', pwd: '123456', roles:['root']})
使用 db.auth() 方法可以驗(yàn)證用戶密碼是否OK.

在test db 下的test_user/test_guest/test_owner 賬號(hào)
use test db.createUser({user:'test_user', pwd: '123456', roles:[{db:'test', role:'readWrite'}]}) db.createUser({user:'test_guest', pwd: '123456', roles:[{db:'test', role:'read'}]}) db.createUser({user:'test_owner', pwd: '123456', roles:[{db:'test', role:'dbOwner'}]})

在 admin 數(shù)據(jù)庫(kù)的 system.users 集合中, 可以查看所有用戶信息.

======================================
啟用驗(yàn)證方式登錄
======================================
mongo 的配置文件mongod.cfg 增加 auth 選項(xiàng)
mongod.cfg新版使用yml格式, 配置如下:
security:
authorization: enabled
mongod.cfg老版文件, 配置如下:
auth=true
再次啟動(dòng)mongo.exe客戶端, 運(yùn)行 show dbs, 沒(méi)有列出任何數(shù)據(jù)庫(kù), 可見并未進(jìn)行真正登錄成功

mongodb.exe 客戶端使用賬號(hào)密碼方式登錄, 以root賬號(hào)登錄:
.\mongo.exe mongodb://localhost:27017/admin -u root -p 123456
端口后的/db, 這里的db和應(yīng)用程序連接url的authSource含義相同, 用來(lái)指定在哪個(gè)庫(kù)驗(yàn)證用戶. 雖然 admin 庫(kù)下存儲(chǔ)所有賬號(hào)的用戶名和密碼, 但 authSource 參數(shù)不一定就是 admin 庫(kù), 準(zhǔn)確地說(shuō): 在哪個(gè)庫(kù)下創(chuàng)建用戶, authSource 就是那個(gè)庫(kù).
root 賬號(hào)雖然能管理任何數(shù)據(jù)庫(kù), 但不能直接登錄test 數(shù)據(jù)庫(kù).

test_owner 賬號(hào)登錄:

======================================
應(yīng)用程序url寫法:
======================================
mongodb://root:123456@127.0.0.1:27017/admin?authSource=admin&w=majority&wTimeoutMS=5000&journal=true&readPreference=primary&retryWrites=true mongodb://test_owner:123456@127.0.0.1:27017/test?authSource=test&w=majority&wTimeoutMS=5000&journal=true&readPreference=primary&retryWrites=true
- authSource 參數(shù), 用來(lái)指定在哪個(gè)庫(kù)驗(yàn)證用戶. 雖然 admin 庫(kù)下存儲(chǔ)所有賬號(hào)的用戶名和密碼, 但 authSource 參數(shù)不一定就是 admin 庫(kù), 準(zhǔn)確地說(shuō): 在哪個(gè)庫(kù)下創(chuàng)建用戶, authSource 就是那個(gè)庫(kù).
- retryWrites 采用可重試寫入方式, 設(shè)定 retryWrites 為true 后, writeConcern 參數(shù)配不能設(shè)置為 0
- w 參數(shù)即 writeConcern, 設(shè)置為 majority, 保證每次寫操作都成功寫入到復(fù)制集中的多數(shù)服務(wù)器中, 數(shù)據(jù)安全性較好.
- j 參數(shù)即 journal HAL日志, j=true, 落盤后返回寫操作, j=false, 刷到內(nèi)存后即返回寫操作.
- wTimeoutMS 設(shè)定 writeConcern 的超時(shí)時(shí)間, 單位毫秒, 如果沒(méi)有設(shè)定, 則寫操作可能會(huì)無(wú)限阻塞等待.
- readPreference 參數(shù), 設(shè)定讀操作選用節(jié)點(diǎn)的策略, 默認(rèn)為只從主節(jié)點(diǎn)讀取, 可選項(xiàng)有:
- primary (只主)只從 primary 節(jié)點(diǎn)讀數(shù)據(jù),這個(gè)是默認(rèn)設(shè)置
- primaryPreferred (先主后從)優(yōu)先從 primary 讀取,primary 不可服務(wù),從 secondary 讀
- secondary (只從)只從 scondary 節(jié)點(diǎn)讀數(shù)據(jù)
- secondaryPreferred (先從后主)優(yōu)先從 secondary 讀取,沒(méi)有 secondary 成員時(shí),從 primary 讀取
- nearest (就近)根據(jù)網(wǎng)絡(luò)距離就近讀取,根據(jù)客戶端與服務(wù)端的PingTime實(shí)現(xiàn)
======================================
MongoDB for VS Code插件的使用
======================================
MongoDB 官方的VS code插件, 可以編寫playground 文件, 語(yǔ)法是 js, 可以編寫一些CRUD的腳本,
如果是使用Run selected line from playground 命令, 選擇部分要包含 use("test") 代碼來(lái)切換到目標(biāo)DB, 否則都是在默認(rèn)db中執(zhí)行.
另外, 輸出窗口也切換到 Playground output, 這樣我們能看到一些自己的print()結(jié)果.

======================================
mongodb role類型
======================================
數(shù)據(jù)庫(kù)用戶角色(Database User Roles):
read:授予User只讀數(shù)據(jù)的權(quán)限
readWrite:授予User讀寫數(shù)據(jù)的權(quán)限
數(shù)據(jù)庫(kù)管理角色(Database Administration Roles):
dbAdmin:在當(dāng)前DB中執(zhí)行管理操作
dbOwner:在當(dāng)前DB中執(zhí)行任意操作
userAdmin:在當(dāng)前DB中管理User
備份和還原角色(Backup and Restoration Roles):
backup
restore
跨庫(kù)角色(All-Database Roles):
readAnyDatabase:授予在所有數(shù)據(jù)庫(kù)上讀取數(shù)據(jù)的權(quán)限
readWriteAnyDatabase:授予在所有數(shù)據(jù)庫(kù)上讀寫數(shù)據(jù)的權(quán)限
userAdminAnyDatabase:授予在所有數(shù)據(jù)庫(kù)上管理User的權(quán)限
dbAdminAnyDatabase:授予管理所有數(shù)據(jù)庫(kù)的權(quán)限
集群管理角色(Cluster Administration Roles):
clusterAdmin:授予管理集群的最高權(quán)限
clusterManager:授予管理和監(jiān)控集群的權(quán)限,A user with this role can access the config and local databases, which are used in sharding and replication, respectively.
clusterMonitor:授予監(jiān)控集群的權(quán)限,對(duì)監(jiān)控工具具有readonly的權(quán)限
hostManager:管理Server
超級(jí)角色(super master Roles)
root :超級(jí)賬戶和權(quán)限,只在admin中可用
======================================
參考
======================================

浙公網(wǎng)安備 33010602011771號(hào)