1.打開cmd命令窗口
2.輸入mongo,如圖
3.創建管理用戶(這一步一定要給我先做了)
use admin
db.createUser( {user: "admin",pwd: "123456",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]})
4.找到mongod.cfg文件
4.1 windows系統的話,一般在c盤的Program Files\MongoDB\Server\4.2\bin下
4.2 linux系統的一般在/etc 下
5.在mongod.cfg添加如下代碼(注意縮進):
security:
authorization: enabled
6.重啓mongoDB
systemctl restart mongod.service
7.再進入cmd,輸入mongo. 因爲開啓的權限,所以這次一定要先
use admin
db.auth("admin","123456")
8.創建你的數據庫,並給這個數據庫一個讀寫權限的賬戶(以下都以ceshi數據庫爲例子)
use ceshi
db.createUser({user:"ceshi",pwd:"123456",roles:[{role:"readWrite",db:"ceshi"}]})
出現如圖:
則爲成功
出現如圖:
則爲失敗,原因就是你沒使用admin先登陸!
9.node連接數據庫,以連接本地數據庫爲例
module.exports = app => {
const mongoose = require("mongoose")
mongoose.connect('mongodb://ceshi:[email protected]:27017/ceshi', {
useNewUrlParser: true,
useUnifiedTopology: true
})
}
以下部分是我自己折騰,最好不看
其實你會發現admin用戶並沒有查看ceshi數據庫的權限,那是因爲mongoDB本來就沒有什麼管理管理員,賦給他的userAdminAnyDatabase就是管理用戶的權限,查看數據庫的權限在ceshi這個用戶.
若你要賦給admin讀寫ceshi這個數據的權限,也可以通過
db.grantRolesToUser("admin",[{role:"readWrite",db:"ceshi"}])
但通過admin驗證,則node連接數據庫部分需要加上authSource,即:
module.exports = app => {
const mongoose = require("mongoose")
mongoose.connect('mongodb://admin:[email protected]:27017/ceshi?authSource=admin', {
useNewUrlParser: true,
useUnifiedTopology: true
})
}
因爲admin用戶的賬號密碼存儲在admin數據庫,依賴於另外一個數據庫.具體自己看mongoDB的文檔