02、MongoDB -- MongoDB 的安全配置(创建用户、设置用户权限、启动安全控制、操作数据库命令演示、mongodb 的帮助系统介绍)

目录

  • [MongoDB 的安全配置](#MongoDB 的安全配置)
    • [演示前准备:启动 mongodb 服务器 和 客户端 :](#演示前准备:启动 mongodb 服务器 和 客户端 :)
      • [1、启动单机模式的 mongodb 服务器](#1、启动单机模式的 mongodb 服务器)
      • [2、启动 mongodb 的客户端](#2、启动 mongodb 的客户端)
    • [MongoDB 的安全配置](#MongoDB 的安全配置)
      • [启动演示用到的 mongodb 服务器 和 客户端](#启动演示用到的 mongodb 服务器 和 客户端)
        • [启动单机模式的 mongodb 服务器:](#启动单机模式的 mongodb 服务器:)
        • [启动 mongodb 的客户端](#启动 mongodb 的客户端)
      • [MongoDB 操作数据库命令](#MongoDB 操作数据库命令)
      • [MongoDB 的帮助系统](#MongoDB 的帮助系统)
      • [在 客户端 创建用户:](#在 客户端 创建用户:)
        • [1、切换到 admin 数据库](#1、切换到 admin 数据库)
        • [2、创建管理员 admin](#2、创建管理员 admin)
        • [3、创建超级管理员 root](#3、创建超级管理员 root)
        • [4、再创建两个普通的用户 LJHAAA 和 LJHBBB](#4、再创建两个普通的用户 LJHAAA 和 LJHBBB)
        • 5、删除用户演示
      • [MongoDB 所支持的权限](#MongoDB 所支持的权限)
      • [启动 MongoDB 安全控制](#启动 MongoDB 安全控制)
        • [1、修改 mongod.conf 配置文件](#1、修改 mongod.conf 配置文件)
        • [2、重启 mongodb 客户端](#2、重启 mongodb 客户端)
        • [3、用户登录 mongodb 演示](#3、用户登录 mongodb 演示)

MongoDB 的安全配置

演示前准备:启动 mongodb 服务器 和 客户端 :

本次演示,只需要启动一个 单机模式的 mongodb 服务器 和 一个 mongodb 的客户端,

1、启动单机模式的 mongodb 服务器

打开命令行窗口,执行如下命令即可启动 MongoDB 服务器了

复制代码
mongod.exe --config "E:\install\mongodb\mongodb-4.2.25\mongod.conf"

就是只启动一个 mongodb 的服务器

2、启动 mongodb 的客户端

启动 mongodb 的客户端,指定要连接的 mongodb 服务器的端口号:

复制代码
mongo mongodb://192.168.0.107:27017

即可启动 mongodb 的客户端

启动成功,如图:

之所以只需要输入 mongo 就能启动 mongodb 的客户端,是因为我之前把 mongodb 的 bin 目录添加到 path 环境变量里面 。

MongoDB 的安全配置

在默认情况下,MongoDB 并不需要安全认证即可直接进入,就像前面配置副本集时,直接使用 mongo.exe(客户端)即可连接 mongodb 服务器。

这样明显不安全,接下来给 mongodb 搞个安全配置--创建用户及权限名、启用Mongodb安全控制、mongodb 权限的设计

启动演示用到的 mongodb 服务器 和 客户端

接下来的演示:启动单机模式的mongodb服务器和客户端服务器就可以了

启动单机模式的 mongodb 服务器:
复制代码
mongod.exe --config "E:\install\mongodb\mongodb-4.2.25\mongod.conf"
启动 mongodb 的客户端

启动 mongodb 的客户端,指定要连接的 mongodb 服务器的端口号

复制代码
mongo mongodb://192.168.0.107:27017

之所以只需要输入 mongo 就能启动 mongodb 的客户端,是因为我之前把 mongodb 的 bin 目录添加到 path 环境变量里面 。

MongoDB 操作数据库命令

在介绍配置用户之前,先介绍 MongoDB 操作数据库的命令:

show databases:查看当前节点的所有数据库(和MySQL相同)

show users: 查看当前数据库中的用户

db:查看当前连接的数据库。

有可能当前所在的数据库其实根本不存在。

use 数据库名:切换 或 创建 数据库(和MySQL相似)。

对 mongodb 来说,如果切换的数据库不存在,该命令就会自动创建数据库,这意味着你永远不会切换失败;

但是,只有当新数据库中插入文档之后才会真正创建该数据库。

从此处可以看到,在MongoDB,你通常并不需要显式创建数据库。

db.dropDatabase():删除数据库。无需指定数据库名,该命令总是删除当前连接的数据库。

db.dropUser("用户名"): 删除指定用户

上面的命令大概就是这个逻辑:

MongoDB 的帮助系统

什么是MongoDB的帮助系统?

除了show、use 等特殊命令之外,其他命令要么是 rs.* 开头的,要么是 db.* 开头的,

这是因为MongoDB命令系统采用了"面向对象"的设计方式,它认为:

1、所有与副本集有关的命令都相当于rs对象的方法,

2、所有与数据库有关的命令都相当于db对象的方法。

这样设计的好处就是可以非常方便使用这些命令的帮助系统。

比如想知道db对象包含哪些方法(命令),只要输入db.help()。

如图:这些 rs.help() 、 db.help() 这种命令, 可以在命令行窗口查看有哪些命令方法可用的【命令行帮助】,就是 mongodb 的帮助系统

如图:输入 db.help() :查看当前连接的数据库包含哪些方法(命令)

上面有关 db 开头的命令,在如下图片都可以找到。

输入 rs.help() 查看副本集有哪些命令可用。

一些解释:

rs 对象:代表副本集,

复制代码
副本集是一种用于提供数据冗余和高可用性的数据库部署方式。
副本集包含多个MongoDB实例(节点),其中一个是主节点(primary),其余的是从节点(secondary)。
副本集为应用程序提供了数据冗余和故障恢复能力,同时还允许读操作(查询)可以在多个节点上进行。

db 对象:代表当前所连接的数据库

之前测试过的这些命令:

这些命令是操作副本集的,所以是 rs 开头的:

rs.initiate(rs_conf):在 mongodb 客户端初始化副本集

rs.conf() :查看副本集的配置。

rs.status() :查看副本集的状态,可看到副本集内谁是主节点,谁是副节点,谁是仲裁节点等详细信息。

rs.slaveOk(boolean) :该命令设置副节点上是否可查看数据

这些命令是操作 db 对象的,所以是 db 开头的:

db.isMaster() :查看当前连接是否为主节点。

在 客户端 创建用户:

现在要在 admin 数据库里面添加两个用户:超级管理员 root 和 管理员 admin

账号:root;密码:123456

账号:admin:密码:123456

通过 MongoDB 客户端执行如下命令:

1、切换到 admin 数据库

这个命令,表示切换到 admin 这个数据库,这样的话,后面创建的用户将会保存在 admin 数据库中

复制代码
use admin  
2、创建管理员 admin

这条命令就是创建一个 admin 用户,且该用户保存 admin 数据库中。基本上它是一个 管理员。

( 数据库叫 admin ,我这里创建一个叫 admin 的用户,并不会有任何冲突,创建的用户名按个人喜好即可)

复制代码
db.createUser({ user: "admin",pwd: "123456",roles: [
    { role: "readWriteAnyDatabase", db: "admin" },
    { role: "userAdminAnyDatabase", db: "admin" },
    { role: "dbAdminAnyDatabase", db: "admin" }]
 });

上面命令的解释:

roles 是个数组,里面的 role 就是具体的权限。

如 :role: readWriteAnyDatabase 表示有读写任意数据库的权限,

db: "admin" 表示: 【role这个读写任意数据库的权限】只对 【admin】 这个数据库生效

admin 这个数据库,是 mongodb 的一个管理级的一个特殊的数据库,是有特殊意义的,所以【readWriteAnyDatabase 】 这个权限在名义上只对【admin】这个数据库起作用,

但是实际上,【admin 】数据库里面拥有【readWriteAnyDatabase 】这个权限的 【admin】 这个用户,对任意数据库都具有读写的功能,不会只局限在【admin】 这个数据里面。

注意点:也只有【admin】这个数据库,才能有【readWriteAnyDatabase 】这个操作任意数据库的权限,如果是我自己创建的一个数据库,是无法为用户设置【readWriteAnyDatabase 】这种类型的权限的,会报错该数据库没有这个权限的用户。

3、创建超级管理员 root

这条命令就是创建一个 root 用户,且该用户保存 admin 数据库中。基本上它是一个 超级管理员。

(root 这个权限也只能放在 admin 这种特殊的数据库里面才能生效)

(root 是最高权限,可以做任何事情)

复制代码
db.createUser({ user: "root",pwd: "123456",roles: [
    { role: "root", db: "admin" }]
 });
4、再创建两个普通的用户 LJHAAA 和 LJHBBB

账号:LJHAAA

密码:123456

复制代码
db.createUser({ user: "LJHAAA",pwd: "123456",roles: [
    { role: "readWrite", db: "local" },
    { role: "userAdmin", db: "local" },
    { role: "readWrite", db: "springboot" },
    { role: "userAdmin", db: "springboot" }]
 });

账号:LJHBBB

密码:123456

复制代码
db.createUser({ user: "LJHBBB",pwd: "123456",roles: [
    { role: "readWriteAnyDatabase", db: "admin" },
    { role: "userAdmin", db: "local" },
    { role: "readWrite", db: "springboot" }]
 });
5、删除用户演示

再添加 LJHCCC 这个用户,然后演示删除。

复制代码
db.createUser({ user: "LJHCCC",pwd: "123456",roles: [
    { role: "readWriteAnyDatabase", db: "admin" },
    { role: "userAdmin", db: "local" },
    { role: "readWrite", db: "springboot" }]
 });

添加后可以输入:show users 查看有哪些用户

可以看到 LJHCCC 这个用户已经创建成功

db.dropUser("LJHCCC"): 删除指定用户

true 表示删除 LJHCCC 这个用户成功,再用 show users 命令查看已经没有这个用户存在了

MongoDB 所支持的权限

read:允许读取指定数据库中数据的权限。

readWrite:允许读、写指定数据库中数据的权限。

dbAdmin:允许对指定数据库中执行管理函数的权限,如索引创建、删除,查看统计或访问 system.profile。

userAdmin:允许对指定数据库执行用户管理的权限,比如创建、删除和修改用户。

clusterAdmin:只对admin数据库可用,授予用户所有分片和副本集相关函数的管理权限。表明分配该权限时,后面的db属性值只能是admin。

readAnyDatabase:只对admin数据库可用,授予用户对所有数据库的read权限。

readWriteAnyDatabase:只对admin数据库可用,授予用户对所有数据库的readWrite权限。

userAdminAnyDatabase:只对admin数据库可用,授予用户对所有数据库的userAdmin权限。

dbAdminAnyDatabase:只对admin数据库可用,授予用户对所有数据库的dbAdmin权限。

root:只对admin数据库可用。超级账号,超级权限。

启动 MongoDB 安全控制

1、修改 mongod.conf 配置文件

先停止 mongodb 的客户端,然后修改 mongod.conf 文件,

在该文件后面增加如下配置:

复制代码
# 启用安全控制
security:
  authorization: enabled

再次启动 mongodb 的客户端,这样 MongoDB 的 用户和安全控制 都配置完成了。

2、重启 mongodb 客户端

启动 mongodb 的客户端,指定要连接的 mongodb 服务器的端口号:

复制代码
mongo mongodb://192.168.0.107:27017

简而言之:就是先修改配置文件:增加 security 的设置;然后重启客户端即可。

3、用户登录 mongodb 演示

【切记】: 当你登录 MongoDB 时,你必须要先进入保存了登录用户的数据库。

(就是我们上面创建的用户都是保存在 admin 这个数据库里面的,所以需要先进去到 admin 这个数据库,然后再进行用户登录验证)

如图:刚登录 mongodb 时,连接的数据库是test,需要切换到 admin 数据库,才能登录成功,因为创建的用户都是保存在 admin 数据库的。

好奇为什么这个 mongodb 服务器不用重启,而只是 客户端 需要重启。

相关推荐
周胡杰3 分钟前
鸿蒙arkts使用关系型数据库,使用DB Browser for SQLite连接和查看数据库数据?使用TaskPool进行频繁数据库操作
前端·数据库·华为·harmonyos·鸿蒙·鸿蒙系统
wkj0017 分钟前
navicate如何设置数据库引擎
数据库·mysql
赵渝强老师10 分钟前
【赵渝强老师】Oracle RMAN的目录数据库
数据库·oracle
暖暖木头11 分钟前
Oracle注释详解
数据库·oracle
御控工业物联网28 分钟前
御控网关如何实现MQTT、MODBUS、OPCUA、SQL、HTTP之间协议转换
数据库·sql·http
GJCTYU2 小时前
spring中@Transactional注解和事务的实战理解附代码
数据库·spring boot·后端·spring·oracle·mybatis
MicroTech20252 小时前
微算法科技(NASDAQ: MLGO)探索Grover量子搜索算法,利用量子叠加和干涉原理,实现在无序数据库中快速定位目标信息的效果。
数据库·科技·算法
黑客老李2 小时前
EDUSRC:智慧校园通用漏洞挖掘(涉校园解决方案商)
服务器·前端·网络·安全·web安全
Code季风2 小时前
SQL关键字快速入门:CASE 实现条件逻辑
javascript·数据库·sql
玥轩_5212 小时前
BUUCTF [WUSTCTF2020]spaceclub 1
安全·网络安全·ctf·buuctf·ascii·spaceclub·wustctf2020