03、MongoDB -- MongoDB 权限的设计

目录

  • MongoDB 权限的设计
    • 演示前准备:启动 mongodb 服务器 和 客户端 :
      • 1、启动单机模式的 mongodb 服务器
      • 2、启动 mongodb 的客户端
    • MongoDB 权限的设计
      • 1、MongoDB 的每个数据库都可以保存用户,不止admin数据库可以保存用户。
      • 2、保存用户的数据库和该用户有权限操作的数据库完全可以是不同的。
      • 3、当用户登录时,必须在保存该用户的数据库中才能登录。
      • 4、该用户登录之后,能否操作哪个数据库,才能看出来该用户对哪些数据库有操作权限。
      • 5、在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 权限的设计


1、MongoDB 的每个数据库都可以保存用户,不止admin数据库可以保存用户。

这一点和传统数据库只能使用系统数据库来保存用户是截然不同的。


2、保存用户的数据库和该用户有权限操作的数据库完全可以是不同的。

比如 ljh 这个用户保存在 【admin】这个数据库里面,但是创建 ljh 这个用户的时候,只给这个用户操作【springboot】这个数据库的权限。
所以虽然 ljh 这个用户是在【admin】 这个数据库创建的,当时确没有操作【admin】数据库的权限。


3、当用户登录时,必须在保存该用户的数据库中才能登录。

比如我登录到 admin 这个数据库

mongo mongodb://192.168.0.107:27017/admin -u admin -p 123456

然后创建一个数据【hahaha】
在这里插入图片描述

在【hahaha】数据库添加一个用户叫 AAA,然后这个用户对这个数据库有读写的权限
userAdmin:允许对指定数据库执行用户管理的权限,比如创建、删除和修改用户

db.createUser({ user: "AAA",pwd: "123456",roles: [{ role: "readWrite", db: "hahaha" },{ role: "userAdmin", db: "hahaha" }]});

重点来了:这个用户是创建在【hahaha】这个数据库里面的。

在这里插入图片描述

演示用户登录时,先演示登录到保存该用户的数据中

mongo mongodb://192.168.0.107:27017/hahaha -u AAA -p 123456

如图,登录成功,还能执行查看用户的操作,说明登录成功没问题。
因为 【AAA】这个用户是保存在【hahaha】这个数据库中的,说明当用户登录时,必须在保存该用户的数据库中才能登录。
在这里插入图片描述


AAA 用户是保存在【hahaha】数据库的,现在看能不能登录到 admin 数据库

mongo mongodb://192.168.0.107:27017/admin -u AAA -p 123456

如图:登录失败,这就说明了当用户登录时,必须在保存该用户的数据库中才能登录。

在这里插入图片描述

【注意】此时的【hahaha】数据库只是添加了 【AAA】这个用户,还不算是真正创建出这个数据库来,
所以给这个数据库添加一条数据,【hahaha】数据库才算是真正创建出来。

在这里插入图片描述


4、该用户登录之后,能否操作哪个数据库,才能看出来该用户对哪些数据库有操作权限。

【切记:】 用户保存在哪个数据库中,用户初始登录时就必须连接该数据库——只有连接该数据库才能验证用户。

这个在第3点也说了,就是 【AAA】这个用户,是保存在【hahaha】这个数据库里面的,所以在初始登录的时候,【AAA】这个用户只有指定是登录【hahaha】这个数据库,才能登录成功,授权成功。


这里再演示一遍:

登录mongodb时,【admin -u admin -p 123456】这个指定【登录的数据库、账号和密码】,就是初始登录时连接的数据

mongo mongodb://192.168.0.107:27017/admin -u admin -p 123456

1、登录的是admin用户,登录的数据库是保存admin用户的【admin】数据库,所以admin这个用户可以正常使用命令查看数据库

在这里插入图片描述


2、登录的是 AAA 用户,AAA用户是保存在【hahaha】数据库里面的,但是此时的初始登录,连接的是admin 数据库

mongo mongodb://192.168.0.107:27017/admin -u AAA -p 123456

如图:AAA用户在初始登录时,验证授权没通过,因为用户保存在哪个数据库中,用户初始登录时就必须连接该数据库——只有连接该数据库才能验证用户
在这里插入图片描述


3、登录的是 AAA 用户,AAA用户是保存在【hahaha】数据库里面的,此时的初始登录,连接的就是【hahaha】数据库

mongo mongodb://192.168.0.107:27017/hahaha -u AAA -p 123456

如图:AAA用户登录之后,能操作到【hahaha】数据库这个数据库,报名这个用户有操作这个数据库的权限。

但是如图,它只能查看到 【hahaha】这个数据库,也表明它只对这个数据库有操作权限。

在这里插入图片描述

注意:因为 AAA 用户只有操作 【hahaha】 数据库的权限,所以查看命令也只能查看到自己有权限操作的数据库。
admin 之所以能查看所有数据库,是因为在之前设置时,把它设置成管理员。


5、在MongoDB中创建一个数据库之后,应该在该数据库中创建自己存储的用户,否则就无法在初始连接时仅通过该数据库建立连接

如图:根据3、4点的解释,来说明:登录的是 AAA 用户,AAA用户是保存在【hahaha】数据库里面的,但是此时的初始登录,连接的是admin 数据库,所以就无法在初始连接时与该数据库建立连接。

在这里插入图片描述


演示:

说明:如果你希望程序可以一开始就能连接你所创建的数据库,

  1. 你应该在该数据库中创建自己的用户。

  2. 且要让该用户有操作本数据库的权限——否则你只能登录,登录之后根本就无法访问该数据库。

    【通常:】 通常保存用户的数据库,跟用户有权限操作的数据库还是应该相同,这样才更符合逻辑。

1、创建一个springboot的数据库

在这里插入图片描述

2、在springboot中创建一个用户,且要让该用户有操作本数据库的权限
(这个用户只有读写的权限)

账号:LJHCCC
密码:123456

db.createUser({ user: "LJHCCC",pwd: "123456",roles: [{ role: "readWrite", db: "springboot" },{ role: "userAdmin", db: "springboot" }]});

在这里插入图片描述

在启动一个命令行窗口,登录这个数据库

mongo mongodb://192.168.0.107:27017/springboot -u LJHCCC -p 123456

如图:在MongoDB中创建一个数据库(springboot)之后,在该数据库中创建自己存储的用户(LJHCCC),就可以在初始连接时通过该数据库建立连接

因为 LJHCCC 这个用户只能操作 springboot 这个数据库,
所以查看有哪些数据库时,也只能查到有他操作权限的那个数据库

在这里插入图片描述

在这里插入图片描述







演示创建一个数据库,然后添加一个用户,这个数据库还是没有被真正创建出来,只有往该数据库插入数据,才能算是正在创建出该数据库。

账号: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" }]});

在这里插入图片描述

在这里插入图片描述

添加一条数据的命令:db.test.insert({“aaa”:1})

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM的内存区域划分

目录 1.什么是JVM 2.JVM内存区域划分 2.1各区域详解 2.2经典笔试题: 1.什么是JVM JVM也称为Java虚拟机,它是Java代码的运行环境,Java属于半编译半解释形的语言.它的运行环境在虚拟机上,而不是物理设备.Java这么设定主要是为了跨平台,即一套代码,多处使用.我们只需要编译出一…

技巧 文本编辑器 B列每一行数据换行合并到A列中

一. 需求背景 ⏹A列是我们制作的日文版歌词,B列是中文版译文歌词 现在想让B列的每一行歌词,按下图箭头所示插入到A列的每一行后面 二. 通过文本编辑器的替换功能解决 将Excel中的A和B列的数据复制粘贴到文本编辑器中Excel中的列和列之前是通过Tab来分隔…

Matlab|【免费】基于合作博弈的综合能源系统利益分配优化调度

目录 主要内容 部分代码 结果一览 下载链接 主要内容 该程序实现的模型为综合能源系统利益分配优化调度,采用合作博弈方法,模型针对IES系统的P2G、电解槽、甲烷反应器、储氢罐、CHP和燃气锅炉等设备进行建模,实现基于合作博弈的…

环形链表详解(让你彻底理解环形链表)

文章目录 一.什么是环形链表?二.环形链表的例题(力扣) 三.环形链表的延伸问题 补充 一.什么是环形链表? 环形链表是一种特殊类型的链表数据结构,其最后一个节点的"下一个"指针指向链表中的某个节点&#xff…

代码随想录【数组】 ---- 二分查找

代码随想录【数组】 ---- 二分查找 704.二分查找方法一:二分查找 35.搜索插入位置方法一:二分查找 34.在排序数组中查找元素的第一个和最后一个位置方法一:二分查找 69.x的平方根方法一:袖珍计算器方法二:二分查找方法…

抖音小店的产品价格怎么设置?都需要什么价位的产品?

大家好,我是电商花花。 做抖音小店,一个合理的商品的价格也可以说是非常重要的,价格合理才会吸引到用户这购买。 可能说到价格,很多人第一反应认为随便定就可以了,其实定价是很复杂了,定价定多少&#xf…

一份简单的前端开发指南

文章目录 一、HTML1、表格2、常见标签3、行内、块级4、行内块级元素 二、CSS1、三种样式2、链接样式3、浮动4、清除浮动5、伪类,伪元素6、position7、后代选择器8、弹性布局 三、JavaScripts1、null和undefined的区别2、var let const3、原生数据类型4、双等和三等5…

Vue3 条件渲染 v-if

v-if 指令&#xff1a;用于控制元素的显示或隐藏。 执行条件&#xff1a;当条件为 false 时&#xff0c;会将元素从 DOM 中删除。 应用场景&#xff1a;适用于显示隐藏切换频率较低的场景。 语法格式&#xff1a; <div v-if"数据">内容</div> 基础用…

KubeSphere平台安装系列之三【Linux多节点部署KubeSphere】(3/3)

**《KubeSphere平台安装系列》** 【Kubernetes上安装KubeSphere&#xff08;亲测–实操完整版&#xff09;】&#xff08;1/3&#xff09; 【Linux单节点部署KubeSphere】&#xff08;2/3&#xff09; 【Linux多节点部署KubeSphere】&#xff08;3/3&#xff09; **《KubeS…

图论 - DFS深度优先遍历、BFS广度优先遍历、拓扑排序

文章目录 前言Part 1&#xff1a;DFS&#xff08;深度优先遍历&#xff09;一、排列数字1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 二、n皇后问题1.问题描述输入格式输出格式数据范围输入样例输出样例 2.算法 三、树的重心1.问题描述输入格式输出格式数据范围…

Laravel框架: Call to a member function connect() on null 异常报错处理

Laravel框架&#xff1a; Call to a member function connect() on null 异常报错处理 Date: 2024.03.01 21:03:11 author: lijianzhan 原文链接: https://learnku.com/laravel/t/63721 问题&#xff1a; local.ERROR: Call to a member function connect() on null {"…

为什么模电这么难学?这是我见过最好的回答

大家好&#xff0c;我是砖一&#xff0c;有很多人抱怨模电难学&#xff0c;被誉为电子信息挂科率最高之一&#xff0c;下面听我分析一下为啥模电这么难学&#xff1f; 01 理科的抽象思维 在高等教育体系中&#xff0c;模电是涉及半导体方向的第一门工程类课程&#xff0c;是一…