当前位置:网站首页>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_ahoh
db.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!
表示数据库连接成功。
三、项目代码
边栏推荐
- uniapp sharing function - share to friends group chat circle of friends effect (sorting)
- 如何根据地址获取函数名
- 从单体架构迁移到 CQRS 后,我觉得 DDD 并不可怕
- 应用联合、体系化推进。集团型化工企业数字化转型路径
- MYS-6ULX-IOT 开发板测评——使用 Yocto 添加软件包
- kernel hung_task死锁检测机制原理实现
- 建模师经验分享:模型学习方法
- 社区分享|腾讯海外游戏基于JumpServer构建游戏安全运营能力
- [QNX Hypervisor 2.2用户手册]10.6 vdev mc146818
- Linear DP (bottom)
猜你喜欢
Kernel函数解析之kernel_restart
怎么将自己新文章自动推送给自己的粉丝(巨简单,学不会来打我)
Xiaohei leetcode surfing: 94. Inorder traversal of binary tree
360市值四年蒸发3900亿,政企安全能救命吗?
使用OpenCV实现一个文档自动扫描仪
小黑leetcode冲浪:94. 二叉树的中序遍历
生产者消费者问题
MySQL增删改查基础
NebulaGraph v3.2.0 Release Note, many optimizations such as the performance of querying the shortest path
【软件测试】常用ADB命令
随机推荐
【软件测试】常用ADB命令
Laravel 实现redis分布式锁
Day118. Shangyitong: order list, details, payment
d枚举生成位
Xiaohei leetcode surfing: 94. Inorder traversal of binary tree
一点点读懂cpufreq(一)
2022年华数杯数学建模
#yyds干货盘点#交换设备丢包严重的故障处理
一点点读懂regulator(四)
注解@EnableAutoConfiguration的作用以及如何使用
NebulaGraph v3.2.0 Release Note, many optimizations such as the performance of querying the shortest path
招标公告 | 海纳百创公众号运维项目
Nuclei (2) Advanced - In-depth understanding of workflows, Matchers and Extractors
【字符串函数内功修炼】strcpy + strcat + strcmp(一)
学会反射后,我被录取了(干货)
从单体架构迁移到 CQRS 后,我觉得 DDD 并不可怕
基于深度学习的路面坑洞检测(详细教程)
npm基本操作及命令详解
如何根据地址获取函数名
3年,从3K涨薪到20k?真是麻雀啄了牛屁股 — 雀食牛逼呀