Windows搭建MongoDB(3):开启数据库认证权限

114 阅读5分钟

前言

大家好,我是王嗨皮,一名主业前端,副业全栈的程序员,在这里我会分享关于前端进阶全栈的常用技术基本入门操作。 如果我的文章能让您有所收获,欢迎一键三连(评论,点赞,关注)。

关于权限认证

上一章我们在windows环境下成功启动并连接了MongoDB数据库服务。

但是在使用 mongosh 连接时,会有警告提示我们当前数据库没有配置认证权限。

Access control is not enabled for the database. Read and write access to data and configuration is unrestricted

本章来讲述一下如何开启MongoDB数据库认证权限,确保在生产环境下,提高数据库的安全性,防止未经授权的用户随意访问篡改数据。

1.创建管理员账户

首先运行cmd打开终端,执行 mongod --dbpath D:/data/db,启动服务。

重启完成后,继续执行 mongosh,连接数据库。

QQ截图20251106113336.png

此时,我们需要创建一个管理员用户, 执行 use admin,切换到 admin 数据库,MongoDB实例下初始化的数据库有三个,分别是 adminlocalconfig,其中 admin 是专门用于用户认证和角色管理的数据库,所以我们要在 admin 数据库下创建账户。

QQ截图20251106114700.png

切换到 admin 数据库后,创建一个账户,代码如下:

db.createUser({
  user: "username",
  pwd: "yourpassword",
  roles: [{ role: "root", db: "admin" }]
})

user 代表用户名设置,pwd 是数据库密码设置,

role:"root" 表示创建的角色是超级管理员,对数据库拥有完全访问权限,role 的其它常用角色包括:

  • read: 允许用户对指定数据库进行读取操作。
  • readWrite: 允许用户对指定数据库进行读取和写入操作。
  • userAdmin: 允许用户管理数据库用户和角色。

db 字段指定了角色适用的数据库,db: "admin" 表示该角色具有所有数据库的权限。

当然我们也可以对指定数据库赋予角色和权限,我们为test的数据库赋予readWrite读写权限,代码如下:

roles: [
  { role: "readWrite", db: "test" }
]

当一个用户角色授予其 role: "rootdb: "admin",那么该用户拥有MongoDB里所有数据库的最高权限。

输入代码回车,终端如果返回 {ok: 1},代表创建成功。

QQ截图20251106144354.png

2.开启认证权限

打开MongoDB安装目录,找到 bin 文件夹下的 mongod.cfg 配置文件。

QQ截图20251106104111.png

使用记事本打开配置文件,找到 security: ,在下方添加 authorization: "enabled",这个配置项代表开启数据库认证权限,配置时注意空格的问题,通常是在前面空两格。

QQ截图20251106105326.png

建议要在 admin 下创建管理员账户完成后再去配置文件中开启权限认证。

如果先开启权限认证会有可能因为权限问题导致无法访问 admin 数据库从而无法进行管理账户创建。

配置完成后,保存并关闭配置文件,同时关闭MongoDB服务。

3.检查认证权限配置是否生效

完成用户创建后,我们重启MongoDB服务。

再次执行 mongod --dbpath D:/data/db --config D:/mongodb/bin/mongod.cfg --auth

注意:MongodDB默认不启用认证,要开启权限认证必须在执行命令里添加 --auth

添加 auth 这个参数代表开启数据认证机制,添加认证后MongoDB会要求用户提供有效用户名和密码才能访问数据库。

重启服务后,我们先执行 mongosh 连接数据库,然后在 test 数据库下新建一个集合并插入一条数据,代码如下:

db.users.insertOne({
  name: "Mike",
  age: 30,
})

这段代码的意思是在test数据库下创建了一个 users 集合,并插入了一条用户信息的数据。

代码输入完成后,按回车,返回结果如下:

QQ截图20251106155217.png

MongoServerError[Unauthorized]: not authorized on test to execute command { insert: "users", documents: [ { name: "Mike", age: 30, _id: ObjectId('690c52d120d2a48906cebea4') } ], ordered: true, lsid: { id: UUID("9bc8ac94-6988-4348-8160-b37480273e66") }, $db: "test" }

返回的这段提示,就是告诉我们目前没有权限对数据库进行操作,其实代表已经成功开启了数据库认证。

4.认证权限并操作数据库

在终端执行 mongosh -u "your username" --authenticationDatabase admin

-u "your username" 代表之前在admin配置的用户名,

--authenticationDatabase admin 参数时,意味着你正在尝试使用 admin 数据库来进行认证(即验证用户身份)。

按回车执行命令,输入之前配置的密码,即可成功连接数据库。

此时再在test数据库下执行创建集合添加数据的代码,返回信息如下:

QQ截图20251106163656.png

acknowledged: true 表示操作已被确认并成功执行。

5.可视化工具通过认证连接数据库

可视化工具还是以Navicat为例,

点击右上角连接,选择MongoDB数据库,在 验证 一栏选择 password验证数据库填写 admin

配置如下图:

QQ截图20251106164636.png

点击确定完成添加,然后双击侧边栏已添加好的数据库,

可以看到MongoDB实例下所有的数据库,我们打开test - user 可以看到我们之前添加的用户数据

QQ截图20251106165346.png

至此,我们实现了windows系统下开启数据库认证权限并操作数据库的目标。

下一篇将讲述一下如何在生产环境下配置MongoDB,使其能够被远程访问操作。