mongoDB開啓權限認證及node連接數據庫的配置

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的文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章