前言
大家好,我是王嗨皮,一名主业前端,副业全栈的程序员,在这里我会分享关于前端进阶全栈的常用技术 和 基本入门操作。 如果我的文章能让您有所收获,欢迎一键三连(评论,点赞,关注)。
关于权限认证
上一章我们在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,连接数据库。
此时,我们需要创建一个管理员用户, 执行 use admin,切换到 admin 数据库,MongoDB实例下初始化的数据库有三个,分别是 admin,local 和 config,其中 admin 是专门用于用户认证和角色管理的数据库,所以我们要在 admin 数据库下创建账户。
切换到 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: "root,db: "admin",那么该用户拥有MongoDB里所有数据库的最高权限。
输入代码回车,终端如果返回 {ok: 1},代表创建成功。
2.开启认证权限
打开MongoDB安装目录,找到 bin 文件夹下的 mongod.cfg 配置文件。
使用记事本打开配置文件,找到 security: ,在下方添加 authorization: "enabled",这个配置项代表开启数据库认证权限,配置时注意空格的问题,通常是在前面空两格。
建议要在
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 集合,并插入了一条用户信息的数据。
代码输入完成后,按回车,返回结果如下:
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数据库下执行创建集合添加数据的代码,返回信息如下:
acknowledged: true 表示操作已被确认并成功执行。
5.可视化工具通过认证连接数据库
可视化工具还是以Navicat为例,
点击右上角连接,选择MongoDB数据库,在 验证 一栏选择 password,验证数据库填写 admin
配置如下图:
点击确定完成添加,然后双击侧边栏已添加好的数据库,
可以看到MongoDB实例下所有的数据库,我们打开test - user 可以看到我们之前添加的用户数据
至此,我们实现了windows系统下开启数据库认证权限并操作数据库的目标。
下一篇将讲述一下如何在生产环境下配置MongoDB,使其能够被远程访问操作。