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:123456@127.0.0.1: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:123456@127.0.0.1:27017/ceshi?authSource=admin', {
useNewUrlParser: true,
useUnifiedTopology: true
})
}
因为admin用户的账号密码存储在admin数据库,依赖于另外一个数据库.具体自己看mongoDB的文档