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

目录

  • MongoDB 的安全配置
    • 演示前准备:启动 mongodb 服务器 和 客户端 :
      • 1、启动单机模式的 mongodb 服务器
      • 2、启动 mongodb 的客户端
    • MongoDB 的安全配置
      • 启动演示用到的 mongodb 服务器 和 客户端
        • 启动单机模式的 mongodb 服务器:
        • 启动 mongodb 的客户端
      • MongoDB 操作数据库命令
      • MongoDB 的帮助系统
      • 在 客户端 创建用户:
        • 1、切换到 admin 数据库
        • 2、创建管理员 admin
        • 3、创建超级管理员 root
        • 4、再创建两个普通的用户 LJHAAA 和 LJHBBB
        • 5、删除用户演示
      • MongoDB 所支持的权限
      • 启动 MongoDB 安全控制
        • 1、修改 mongod.conf 配置文件
        • 2、重启 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 服务器不用重启,而只是 客户端 需要重启。

在这里插入图片描述




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/424853.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

光学遥感卫星分辨率的奥秘 !!

文章目录 前言 1、光学遥感卫星分辨率的多维视角 (1)空间分辨率 (2)光谱分辨率 (3)辐射分辨率 (4)时间分辨率 2、光学遥感分辨率的重要性 3、遥感分辨率的挑战与进步 4、未来展望 总…

《Spring Security 简易速速上手小册》第7章 REST API 与微服务安全(2024 最新版)

文章目录 7.1 保护 REST API7.1.1 基础知识详解7.1.2 重点案例:使用 JWT 进行身份验证和授权案例 Demo 7.1.3 拓展案例 1:API 密钥认证案例 Demo测试API密钥认证 7.1.4 拓展案例 2:使用 OAuth2 保护 API案例 Demo测试 OAuth2 保护的 API 7.2 …

【2024】利用python爬取csdn的博客用于迁移到hexo,hugo,wordpress...

前言 博主根据前两篇博客进行改进和升级 利用python爬取本站的所有博客链接-CSDN博客文章浏览阅读955次,点赞6次,收藏19次。定义一个json配置文件方便管理现在文件只有用户名称,后续可加配置读取用户名称,并且将其拼接成csdn个人博客链接ty…

OpenChat:性能高达105.7%,第一个超越ChatGPT的开源模型?

OpenChat:性能高达105.7%,第一个超越ChatGPT的开源模型? 前几天开源模型第一还是是Vicuna-33B、WizardLM,这不又换人了。对于开源模型的风起云涌,大家见怪不怪,不断更新的LLM榜单似乎也没那么吸引人了。 …

数学建模【因子分析】

一、因子分析简介 因子分析由斯皮尔曼在1904年首次提出,其在某种程度上可以被看成是主成分分析的推广和扩展。 因子分析法通过研究变量间的相关系数矩阵,把这些变量间错综复杂的关系归结成少数几个综合因子,由于归结出的因子个数少于原始变…

C/C++工程师面试题(数据库篇)

索引的优缺点 索引是一种支持快速查找特定行的数据结构,如果没有索引,就需要遍历整个表进行查找。用于提高数据检索的速度和效率。 好处: 提高检索速度: 索引可以加快数据的检索速度,因为它们允许数据库系统直接定位到…

Mysql学习之MVCC解决读写问题

多版本并发控制 什么是MVCC MVCC (Multiversion Concurrency Control)多版本并发控制。顾名思义,MVCC是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之&#xff0…

【Tomcat】The CATALINA_HOME environment variable is not defined correctly

文章目录 一、问题二、解决办法三、优化 一、问题 运行绿色版Tomcat时,单击apache-tomcat-9.0.27\bin\startup.bat时窗口一闪而过。 检查JAVA_HOME环境变量,可以发现并没有问题。 为了检查错误,将startup.bat程序使用文本编辑器打开&#x…

Debezium发布历史163

原文地址: https://debezium.io/blog/2023/09/23/flink-spark-online-learning/ 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. Online machine learning with the data streams from the database …

C++_程序流程结构_选择结构_switch

作用 执行多条件分支语句 语法 if和switch区别 switch 缺点,判断的时候只能是整形或者字符型,不可以是一个区间switch 优点,结构清晰,执行效率高

go 命令行框架cobra

go 命令行框架cobra go 拉取依赖包go get github.com/spf13/cobra 认识spf13/cobra-cli. cobra 命令行框架在golang中的地位也算得上是大明星级别。像k8s,docker都有使用这个框架构建自己命令行这块的功能. 最最最简单的开始----使用命令行工具cobra-cli来初始化你的demo c…

四种策略改进的麻雀算法!效果起飞!你确定不来看看吗?

声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~ 目录 效果展示: 改进策略详解&#…

C语言——指针的进阶——第1篇——(第26篇)

坚持就是胜利 文章目录 一、字符指针1、面试题 二、指针数组三、数组指针1、数组指针的定义2、&数组名 VS 数组名3、数组指针的使用(1)二维数组传参,形参是 二维数组 的形式(2)二维数组传参,形参是 指针…

django的模板渲染中的【高级定制】:按数据下标id来提取数据

需求: 1:在一个页面中显示一张数据表的数据 2:不能使用遍历的方式 3:页面中的数据允许通过admin后台来进行修改 4:把一张数据表的某些内容渲染到[xxx.html]页面 5:如公司的新商品页面,已有固定的…

python进阶:可迭代对象和迭代器

一、Iterable(可迭代对象) 1、可迭代对象:能够进行迭代操作的对象。 可以理解为:能够使用for循环遍历的都是可迭代对象;**所有的可迭代对象,偶可以用内置函数iter转换为迭代器** 2、可迭代对象包括&…

Linux文本处理三剑客:awk(常用匹配模式)

在Linux操作系统中,grep、sed、awk被称为文本操作“三剑客”,上三期中,我们将详细介绍grep、sed、awk的基本使用方法,希望能够帮助到有需要的朋友。 1、前言 awk作为一门编程语言还有很多内容,我们继续学习awk。 网…

快速解决maven依赖冲突

我们在开发过程中经常出现maven依赖冲突,或者maven版本不匹配的情况,我们可以使用阿里云原生脚手架来做maven管理,添加需要的组件,然后点击获取代码,就可以获得对应的依赖文件。

【C语言】InfiniBand驱动mlx4_init和mlx4_cleanup

一、中文注释 Linux内核模块的初始化和清理过程,针对一个称为mlx4的网络设备驱动。以下是代码的逐行中文注释: static int __init mlx4_init(void) {int ret;if (mlx4_verify_params())return -EINVAL; // 检查设备参数是否有效,无效则返回…

.idea文件详解

.idea文件的作用: .idea文件夹是存储IntelliJ IDEA项目的配置信息,主要内容有IntelliJ IDEA项目本身的一些编译配置、文件编码信息、jar包的数据源和相关的插件配置信息。一般用git做版本控制的时候会把.idea文件夹排除,因为这个文件下保存的…

ABAP - SALV教程08 列设置热点及绑定点击事件

实现思路:将列设置成热点,热点列是可点击的,再给SALV实例对象注册点击事件即可,一般作用于点击单号跳转到前台等功能 "设置热点方法METHODS:set_hotspot CHANGING co_alv TYPE REF TO cl_salv_table...."事件处理方法M…