当前位置:网站首页>MongoDB权限验证开启与mongoose数据库配置
MongoDB权限验证开启与mongoose数据库配置
2022-08-04 23:34:00 【@魏大大】

Express项目最常用的数据库是mongodb,并搭配模块mongoose完成对数据库的访问。
本文假设您已经正确的完成了mongodb数据库的安装,下面是针对mongodb的设置和项目配置工作。
一、为mongodb数据库设置权限验证
在mongodb安装完成之后,默认情况下是关闭权限验证的,也就是说不需要使用任何密码就可以访问数据库中的数据,这种做法在生产环境是非常危险的行为。
如何查看我们的mongodb数据库是否开启了权限验证呢?非常简单,我们只需要打开mongodb的安装目录,在其中找到名为/bin/mongod.cfg的配置文件,查看其中security选项下的authroization配置,如果该选项被注释或者为空,表示没有开启权限验证。
#security:
#authorization: enabled
配置文件中的
#表示注释,这里虽然authorization被设置为了enabled,但由于被注释掉了所以仍然表示没有开启权限验证。
如果您的mongodb还没有开启权限验证,可以跟随下面的步骤完成设置。
1.1 创建超级管理员
mongodb在完成安装之后,默认会创建三个数据库,分别为admin、config、local。其中,admin数据库的管理员就是mongodb的超级管理员。
创建超级管理员需要使用两个命令:
use admin
db.createUser({
user:'admin',
pwd:'123456',
roles:[{
role:'root',db:'admin'}]
})
以上命令会为admin数据库创建一个名为admin的超级管理员(角色为root),其密码为123456(生产环境请务必使用复杂的密码,以保证数据库安全)。
在超级管理员创建完成之后,我们可以使用命令show users查看当前数据库中的用户,超级管理员创建的过程如下:
> use admin
switched to db admin
> db.createUser({
... user:'admin',
... pwd:'123456',
... roles:[{
role:'root',db:'admin'}]
... })
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
> show users
{
"_id" : "admin.admin",
"userId" : UUID("c17aa709-a1d8-4a76-8d5b-0b61bb589d49"),
"user" : "admin",
"db" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
1.2 修改mongod.cfg配置
修改/bin/mongod.cfg文件中的security选项如下:
security:
authorization: enabled
1.3 重启mongodb服务
- 使用快捷键
win + R,并输入services.msc,然后回车

- 在服务列表中找到
MongoDB Server (MongoDB) - 右键选择
重新启动

- 等待服务重新启动

1.4 使用密码登录mongodb
使用如下命令,连接数据库,如果能够成功的连接数据库,说明我们已经开启了权限验证,并创建了超级管理员。
> mongo admin -u admin -p 123456
在开启权限验证之后,使用
mongo命令仍然可以连接mongodb数据库,但是,如果我们使用show dbs命令查看数据库就会遇到权限错误,或者看不到数据库列表。
在完成超级管理员的创建之后,我们还需要再为项目数据库创建一个用户,用于访问项目数据库。
这就和使用Linux系统时不直接使用超级管理员root直接操作系统资源是同样的道理。
1.5 为项目数据库创建用户
假设现在已经创建了一个用于项目的数据库db_ahoh,可以使用以下命令创建一个只能访问ad_ahoh的用户ahohAdmin。
use db_ahoh
db.createUser({
user:"ahohAdmin",
pwd:"123456",
roles:[{
role:"dbOwner",db:"db_ahoh"}]
})
以上命令为数据库db_ahoh创建了一个名为ahohAdmin的用户,这个用户的角色是dbOwner,只能访问db_ahoh一个数据库。
在
mongodb中,创建数据库只需要往数据库中插入一条数据即可,例如,下面的两条命令就可以创建数据库db_ahoh:
use db_ahohdb.tb_users.insert({username:"xiaoming"})上述命令在创建数据库的时候,顺便创建了一个表
tb_users,并插入了一条数据。
1.6 使用项目数据库用户登录
在完成ahohAdmin用户创建之后,可以使用如下命令连接数据库:
mongo db_ahoh -u ahohAdmin -p 123456
此时,如果我们执行show dbs指令,只能看到一个数据库:
> show dbs
db_ahoh 0.000GB
二、使用mongoose连接数据库
mongoose模块是操作mongodb的 不二之选,我们需要先安装mongoose包之后,再进行数据库连接操作。
2.1 安装mongoose模块
使用以下命令,安装mongoose模块:
npm i mongoose
2.2 编辑数据库连接URI
和其他关系型数据库类似,在连接数据库的时候,需要使用一个类似于网页连接的字符串,用于指明需要连接的数据库名称、端口、IP、用户名和密码等信息,格式如下:
mongodb://<username>:<password>@<IP>:<port>/<database>
如果您和本文配置的数据库完全相同,那么您可以使用下面的URI连接mongodb数据库:
mongodb://ahohAdmin:123456@localhost:27017/db_ahoh
这个重要的链接常常会放置在一个独立的配置文件中,而不是硬编码在代码里。
2.3 创建配置文件config.js
在node项目中,我们通常会使用一个名为config.js的文件存放一些重要的配置信息。
在项目根目录下创建文件夹config/,然后在其中创建一个名为config.js的配置文件。
编辑配置文件中的内容如下:
/* config/config.js */
module.exports = {
mongoURI: "mongodb://ahohAdmin:[email protected]:27017/db_ahoh",
}
2.4 使用mongoose连接数据库
在项目的主文件app.js中执行以下步骤,连接mongodb数据库。
- 引入
mongoose模块
const mongoose = require('mongoose')
- 使用
uri连接数据库
const dbUrl = require('./config/config').mongoURI
mongoose.connect(dbUrl)
.then(()=>{
console.log('MongoDB connected!') }) //连接成功输出 MongoDB connected!
.catch(err => console.log(err))
- 测试连接是否成功
执行命令npm run serve启动系统,观察控制台输出。
PS E:\Code\Express\express-server> npm run serve
> [email protected] serve
> nodemon ./bin/www
[nodemon] 2.0.16
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node ./bin/www`
MongoDB connected!
输出MongoDB connected!表示数据库连接成功。
三、项目代码
边栏推荐
- MySQL基础篇【子查询】
- Linux系统重启和停止Mysql服务教程
- [Paper Notes KDD2021] MixGCF: An Improved Training Method for Graph Neural Network-based Recommender Systems
- PID Controller Improvement Notes No. 7: Improve the anti-overshoot setting of the PID controller
- PAN3020 Sub-1G无线收发芯片
- 加解密在线工具和进制转化在线工具
- Kernel函数解析之kernel_restart
- 一点点读懂regulator(四)
- Implementing class target method exception using proxy object execution
- 话题 | 雾计算和边缘计算有什么区别?
猜你喜欢

【手撕AHB-APB Bridge】~ AMBA总线 之 AHB

Go 语言快速入门指南:什么是 TSL 安全传输层

【软件测试】常用ADB命令

3年,从3K涨薪到20k?真是麻雀啄了牛屁股 — 雀食牛逼呀

堪称奔驰“理财产品”,空间媲美宝马X5,采用了非常运动的外观

为何越来越多人选择进入软件测试行业?深度剖析软件测试的优势...

深度|医疗行业勒索病毒防治解决方案

Security software Avast and Symantec NortonLifeLock merge with UK approval, market value soars 43%
![[Cultivation of internal skills of string functions] strcpy + strcat + strcmp (1)](/img/b6/5a1c8b675dc7f67f359c25908403e1.png)
[Cultivation of internal skills of string functions] strcpy + strcat + strcmp (1)

一点点读懂thermal(一)
随机推荐
Go 编程语言(简介)
「津津乐道播客」#397 厂长来了:怎样用科技给法律赋能?
~ hand AHB - APB Bridge 】 【 AMBA AHB bus
入门3D游戏建模师知识必备
mysql基础
PID控制器改进笔记之七:改进PID控制器之防超调设定
Web安全开发 | 青训营笔记
Pytest学习-Fixture
Will we still need browsers in the future?(feat. Maple words Maple language)
Service Mesh落地路径
Xiaohei's leetcode journey: 95. Longest substring with at least K repeating characters
直接插入排序
当panic或者die被执行时,或者发生未定义指令时,如何被回调到
一点点读懂cpufreq(一)
仪表板展示 | DataEase看中国:数据呈现中国资本市场
The role of the annotation @ EnableAutoConfiguration and how to use
使用代理对象执行实现类目标方法异常
Implementing class target method exception using proxy object execution
一点点读懂regulator(四)
NebulaGraph v3.2.0 Release Note, many optimizations such as the performance of querying the shortest path