• MongoDB权限验证开启与mongoose数据库配置


    在这里插入图片描述

    Express项目最常用的数据库是mongodb,并搭配模块mongoose完成对数据库的访问。
    本文假设您已经正确的完成了mongodb数据库的安装,下面是针对mongodb的设置和项目配置工作。

    一、为mongodb数据库设置权限验证

    mongodb安装完成之后,默认情况下是关闭权限验证的,也就是说不需要使用任何密码就可以访问数据库中的数据,这种做法在生产环境是非常危险的行为。
    如何查看我们的mongodb数据库是否开启了权限验证呢?非常简单,我们只需要打开mongodb的安装目录,在其中找到名为/bin/mongod.cfg的配置文件,查看其中security选项下的authroization配置,如果该选项被注释或者为空,表示没有开启权限验证。

    #security: 
    #authorization: enabled
    
    • 1
    • 2

    配置文件中的#表示注释,这里虽然authorization被设置为了enabled,但由于被注释掉了所以仍然表示没有开启权限验证。

    如果您的mongodb还没有开启权限验证,可以跟随下面的步骤完成设置。

    1.1 创建超级管理员

    mongodb在完成安装之后,默认会创建三个数据库,分别为adminconfiglocal。其中,admin数据库的管理员就是mongodb的超级管理员。
    创建超级管理员需要使用两个命令:

    use admin
    
    db.createUser({
      user:'admin',
      pwd:'123456',
      roles:[{role:'root',db:'admin'}]
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    以上命令会为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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    1.2 修改mongod.cfg配置

    修改/bin/mongod.cfg文件中的security选项如下:

    security: 
       authorization: enabled
    
    • 1
    • 2

    1.3 重启mongodb服务

    1. 使用快捷键win + R,并输入services.msc,然后回车

    image.png

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

    image.png

    1. 等待服务重新启动

    image.png

    1.4 使用密码登录mongodb

    使用如下命令,连接数据库,如果能够成功的连接数据库,说明我们已经开启了权限验证,并创建了超级管理员。

    > mongo admin -u admin -p 123456
    
    • 1

    在开启权限验证之后,使用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"}]
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    以上命令为数据库db_ahoh创建了一个名为ahohAdmin的用户,这个用户的角色是dbOwner,只能访问db_ahoh一个数据库。

    mongodb中,创建数据库只需要往数据库中插入一条数据即可,例如,下面的两条命令就可以创建数据库db_ahoh:

    1. use db_ahoh
    2. db.tb_users.insert({username:"xiaoming"})

    上述命令在创建数据库的时候,顺便创建了一个表tb_users,并插入了一条数据。

    1.6 使用项目数据库用户登录

    在完成ahohAdmin用户创建之后,可以使用如下命令连接数据库:

    mongo db_ahoh -u ahohAdmin -p 123456
    
    • 1

    此时,如果我们执行show dbs指令,只能看到一个数据库:

    > show dbs
    db_ahoh  0.000GB
    
    • 1
    • 2

    二、使用mongoose连接数据库

    mongoose模块是操作mongodb的 不二之选,我们需要先安装mongoose包之后,再进行数据库连接操作。

    2.1 安装mongoose模块

    使用以下命令,安装mongoose模块:

    npm i mongoose
    
    • 1

    2.2 编辑数据库连接URI

    和其他关系型数据库类似,在连接数据库的时候,需要使用一个类似于网页连接的字符串,用于指明需要连接的数据库名称、端口、IP、用户名和密码等信息,格式如下:

    mongodb://<username>:<password>@<IP>:<port>/<database>
    
    • 1

    如果您和本文配置的数据库完全相同,那么您可以使用下面的URI连接mongodb数据库:

    mongodb://ahohAdmin:123456@localhost:27017/db_ahoh
    
    • 1

    这个重要的链接常常会放置在一个独立的配置文件中,而不是硬编码在代码里。

    2.3 创建配置文件config.js

    node项目中,我们通常会使用一个名为config.js的文件存放一些重要的配置信息。
    在项目根目录下创建文件夹config/,然后在其中创建一个名为config.js的配置文件。
    编辑配置文件中的内容如下:

    /*  config/config.js */
    module.exports = {
        mongoURI: "mongodb://ahohAdmin:123456@localhost:27017/db_ahoh",
    }
    
    • 1
    • 2
    • 3
    • 4

    2.4 使用mongoose连接数据库

    在项目的主文件app.js中执行以下步骤,连接mongodb数据库。

    1. 引入mongoose模块
    const mongoose = require('mongoose')
    
    • 1
    1. 使用uri连接数据库
    const dbUrl = require('./config/config').mongoURI
    mongoose.connect(dbUrl)
      .then(()=>{ console.log('MongoDB connected!')  }) //连接成功输出 MongoDB connected!
      .catch(err => console.log(err))
    
    • 1
    • 2
    • 3
    • 4
    1. 测试连接是否成功

    执行命令npm run serve启动系统,观察控制台输出。

    PS E:\Code\Express\express-server> npm run serve
    
    > express-server@0.0.0 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!							
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    输出MongoDB connected!表示数据库连接成功。

    三、项目代码

    02-mongodb-connection

  • 相关阅读:
    Xposed插件的编写
    Anaconda的安装
    深度学习——TensorBoard的使用
    TCP流套接字编程
    UE 材质,如何只取0~1之间的值,其余值抛弃
    07 创建型模式-单例模式
    每天一点python——day74
    ElementUI RUOYI 深色适配
    LeetCode 算法:两两交换链表中的节点 c++
    你有对象类,我有结构体,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang结构体(struct)的使用EP06
  • 原文地址:https://blog.csdn.net/weixin_43302112/article/details/126152261