整理MongoDB文档:身份验证

整理MongoDB文档:身份验证

个人博客,求关注。

文章概叙

本文主要讲MongoDB在单机状态下的账户配置。理解了MongoDB的语法,对于如何配置用户权限会知道怎么配置,但是请注意给谁配置什么权限才是最重要的。

最小权限原则

系统的每个程序或者用户应该使用完成工作所需的最小权限工作

在MongoDB中,最小权限原则指的用户的访问、操作权限应限制为仅执行日常授权活动绝对需要的那些资源。

如一个标准的开发者,你应该给予的是开发环境下的特定库的读写权限,甚至必要情况下给予admin的权限,以免影响到开发的进度。

但对一个生产环境的数据库,应该只给予开发者查看数据的权限,最好不要给予修改数据甚至是admin的权限,不然人家删库跑路,或者遇到新手修改了数据库结构导致线上爆炸,我想你可能过不了一个好年了。。。

MongoDB用户角色

在 MongoDB 中,用户角色用于控制用户对数据库和集合的访问权限。

在MongoDB中,访问权限并不是针对整个系统的,而是针对数据库的。也就是说你给一个开发者分配了一个账号,并不是说这个开发者可以直接登陆我们的DB,并且访问所有的DB,而是给这个开发者a库以及b库的权限,然后他可以在指定的两个库中进行操作,但是无法到c库中进行为所欲为的操作。

除了从数据库的层面进行管控,还对权限方面进行区分以及管控,如前面所提的,开发者在生产环境下,应该只对数据库有查看的权限,不应该对其有修改的权限,也就是说查看以及修改两者是分开的。

接下来用一两个例子,通过对MongoDB的语法来了解角色权限这一块。

内置角色

https://www.mongodb.com/docs/manual/reference/built-in-roles/

MongoDB为我们创建了一堆的角色,被称为内置角色。而每一个内置角色的权限都不相同,当前的版本是依据7.x,上述已经将文章的原链接放上去了,强烈建议大家去查看。

下面先列出所有的角色类别。

数据库用户角色

数据库用户角色拥有read 以及readWriter权限。

read 提供读取所有非系统集合上的数据的能力。即除了config、local、admin的表。

readWriter 提供在read的能力上外加修改所有非系统集合的能力。

数据库管理角色

数据库管理角色拥有dbAdmin, dbOwner, userAdmin权限。

dbAdmin提供执行管理任务的能力,例如与架构相关的任务、索引和收集统计信息。此角色不授予用户和角色管理权限。

userAdmin提供在当前数据库,即可以在当前的数据库中修改人员的权限。

dbOwner数据库所有者可以对数据库执行任何管理操作。此角色结合了由readWrite, dbAdmin和userAdmin角色。

群集管理角色

集群管理角色拥有clusterAdmin, clusterManager, clusterMonitor, hostManager的权限。

clusterManager提供对群集的管理和监视操作,一个具有此角色的用户可以访问和数据库,这些数据库用于分片和复制。

clusterMonitor提供对监视工具的只读访问权限。

hostManager提供监视和管理服务器的功能。

clusterAdmin提供最大的群集管理访问权限。此角色结合了 授予的特权clusterManager, clusterMonitor和hostManager角色。此外,该角色还提供dropDatabase行动。

备份和还原角色

备份和还原角色拥有backup、restore。

backup提供备份数据所需的最小权限。

restore提供从备份还原数据的权限。

全数据库角色

全数据库角色拥有readAnyDatabase, readWriteAnyDatabase, userAdminAnyDatabase, dbAdminAnyDatabase的权限。

readAnyDatabase提供除了admin, config, local库之外的所有数据库的读取权限。

readWriteAnyDatabase在readAnyDatabase的基础上,外加提供除了admin, config, local库之外的所有数据库的编辑权限。

userAdminAnyDatabase提供除了admin, config, local库之外的所有数据库的用户管理操作访问权限。

dbAdminAnyDatabase提供除了admin, config, local库之外的所有数据库的管理员管理操作访问权限。

超级用户角色

超级用户角色拥有root 权限。

root为角色提供为任何用户分配任何权限的功能、任何数据库,这意味着具有这些角色之一的用户可以为自己分配对任何数据库的任何特权。

内部角色

内部角色拥有的是__system权限,一般不会使用到,也超级不建议分配出去。所以不做介绍。

创建用户

当了解了MongoDB的各个角色后,我们就进入到创建角色的篇章,基于前面所提及的最小权限原则,我们创建一个root账号作为后门,以及创建一个在test的只读账号还有在test的读写账号做测试,首先我们需要进入到admin库中。

use admin
db.createUser({user: 'root',pwd: 'root',roles: ['root']})

创建完了root权限后,再创建两个上述的用户。

db.createUser({user: "testRead",pwd: passwordPrompt(),roles: [{ role: "readWrite", db: "test" }]}
)
db.createUser({user: "testReadWrite",pwd: passwordPrompt(),roles: [{ role: "readWrite", db: "test" }]}
)

在这里插入图片描述

使用passwordPrompt()来代替原本的文字输入,毕竟这样子毕竟正经点。

列出用户

当前创建了三个用户,但是在继续操作之前,我们需要将其打印出来,以防止你在测试的时候有问题,但是自己不知道,在admin的库下,输入下方的指令。

db.system.users.find({},{ "user": 1, "roles": 1 })

在这里插入图片描述

此时可以看到,不小心将testRead的权限写错了,应该为read权限,所以后续我们要修改它,但是现在先记下来,不做任何改动。

启用访问控制

在MongoDB部署上启用访问控制会强制执行身份验证。启用访问控制后,用户需要标识自己的身份并且只能执行符合授予的权限的操作分配给其用户的角色。

启动访问控制的方式有两种。

一种在命令行中启,需要在命令行选项中增加 --auth:

mongod --auth --port 27017

第二种方式是使用配置文件启动MongoDB,在配置文件中增加security.authorization设置

security:authorization: enabled

在这里插入图片描述

由于本人喜欢用net start mongodb来启动单机服务,所以就直接使用第二种来启动账号验证了。

在这里插入图片描述

验证权限

现在我们重新启动,并且进入到服务中了,因此我们需要调用下面的方法来输入我们的账号密码,先拿个root账号试试

db.auth("root","root")

在这里插入图片描述

接着,我们想起了之前设置错误的账号–test库下面的testRead,此时,可以使用下面的语法进行更新(正常情况下,都是在admin账号下进行的操作,不会在未开启auth的时候进行修改,所以此时才进行修改,尽可能的模拟出开发环境

db.updateUse("testRead",{roles: [{ role: "read", db: "test" }]})

在这里插入图片描述

修改成功,接下来查看testRead账号是否只有权限查看test下的数据。当然了,修改密码,也是可以这么设置的,只是参数修改为password。

在这里插入图片描述

可以看到,当更改为了testRead账号之后,只能执行查看test库下的数据,无法进行任何的修改操作。

删除角色

对于角色的操作,有了增、改、查,那么就剩下删除的api了,而对于删除,我们需要使用到之前的root账号,并且在admin库下进行修改。
删除角色比较简单,需要注意的是在admin库中进行删除,并且需要有管理员权限。可以使用

db.system.users.remove({ "user": "testRead" })

在这里插入图片描述

至此,单机模式下的mongodb 账号验证就完成了,更多的是需要注意每一个role代表的是什么,如果无法满足角色要求,还有一个更加详细的自定义角色涉及到集合,但是很少用到,太细致的权限反而会加大开发成本,总不能每加一个集合,都要考虑分配给谁谁谁权限吧?

可视化工具中访问

mongodb://username:password@localhost:27017
mongodb://root:root@localhost:27017

在这里插入图片描述

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

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

相关文章

IMX6ULL开发——第一个驱动程序

实现第一个应用程序&#xff1a;在IMX6ULL开发板上运行驱动程序hello_drv_test hello_drv_test #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdio.h> #include <string.h>/** ./hel…

Vue Router - 路由的使用、两种切换方式、两种传参方式、嵌套方式

目录 一、Vue Router 1.1、下载 1.2、基本使用 a&#xff09;引入 vue-router.js&#xff08;注意&#xff1a;要在 Vue.js 之后引入&#xff09;. b&#xff09;创建好路由规则 c&#xff09;注册到 Vue 实例中 d&#xff09;展示路由组件 1.3、切换路由的两种方式 1.…

postgresql14-表的管理(四)

表table 创建表 CREATE TABLE table_name --表名 (column_name data_type column_constraint, --字段名、字段类型、约束字段&#xff08;可选&#xff09;column_name data_type, --表级别约束字段...,table_constraint );CREATE TABLE emp1 --创建表 AS SELECT * FROM empl…

JavaWeb基础

B/S 和 C/S 的区别 B/S( Browser / Server)&#xff1a;即浏览器/服务器&#xff0c;访问的网站资源存放在服务器&#xff0c;无论服务器存放什么&#xff0c;客户端只需要安装一个浏览器&#xff0c;通过这个浏览器访问服务器的资源&#xff0c;B/S架构也有客户端&#xff0c…

【AIGC核心技术剖析】Hotshot-XL 一种 AI 文本转 GIF 模型(论文 + 代码:经过训练可与Stable Diffusion XL一起使用)

Hotshot-XL 是一种 AI 文本转 GIF 模型,经过训练可与Stable Diffusion XL一起使用。 Hotshot-XL 可以使用任何经过微调的 SDXL 模型生成 GIF。这意味着两件事: 您将能够使用您可能想要使用的任何现有或新微调的 SDXL 模型制作 GIF。 如果您想制作个性化主题的 GIF,您可以…

【微信小程序】6天精准入门(第5天:利用案例与后台的数据交互)附源码

一、什么是后台交互&#xff1f; 在小程序中&#xff0c;与后台交互指的是小程序前端与后台服务器之间的数据通信和请求处理过程。通过与后台交互&#xff0c;小程序能够获取服务器端的数据、上传用户数据、发送请求等。 小程序与后台交互可以实现数据的传输、用户认证、实时消…

磁盘分区如何分? 电脑磁盘分区免费软件指南!

列出并比较顶级免费磁盘分区管理器软件&#xff0c;以选择适用于 Windows 的最佳分区软件&#xff1a; 系统分区在现代计算机设备中起着非常重要的作用。它们可以存储数据&#xff0c;使系统文件远离用户数据&#xff0c;并在同一台设备上安装多个操作系统。但是&#xff0c;这…

Note——torch.size() umr_maximum() array.max() itertools.product()

torch.size Problem TypeError: ‘torch.Size’ object is not callable Reason Analysis torch.Size函数不可调用 因为torch只可以.size() 或 shape Solution 将y.shape()替换为y.size() 或 y.shape ytorch.normal(0,0.01,y.size())2 return umr_maximum(a, axis, None…

为什么使用KT6368A蓝牙芯片用app连接,基本都在5分钟左右后断开

为什么我们自己的板子用KT6368A蓝牙芯片&#xff0c;用app连接&#xff0c;基本都是在5分钟左右后 断掉或者断开&#xff0c;什么原因。参考的原理图&#xff0c;是官方的图纸如下 遇到这样的问题&#xff0c;根据我们的经验&#xff0c;大概率是硬件问题&#xff0c;分析方法如…

高斯分布与高斯过程

一元高斯分布 我们从最简单最常见的一元高斯分布开始&#xff0c;其概率密度函数为&#xff1a; p ( x ) 1 σ 2 π e x p ( − ( x − μ ) 2 2 σ 2 ) p(x)\frac{1}{\sigma\sqrt{2\pi}}exp(-\frac{(x-\mu)^2}{2\sigma^2}) p(x)σ2π ​1​exp(−2σ2(x−μ)2​) 其中 μ \…

智慧公厕管理系统:让公厕更智能、更高效的利器

公厕是城市基础设施的重要组成部分&#xff0c;然而&#xff0c;由于管理不善和公共卫生意识的薄弱&#xff0c;公厕经常面临着脏乱差的问题&#xff0c;令人不愿意使用。为了改善公厕管理的现状&#xff0c;智慧公厕管理系统的出现成为了一种创新的解决方案。 智慧公厕管理系…

预测宝可梦武力值、分类宝可梦

regression case 股票预测 无人车看到的各种sensor 影像镜头看到马路上的东西作为输入&#xff0c;输出就是方向盘角度等等的操纵策略 scalar 标量 这个是热力图&#xff0c;相当于你的XYZ但是Z用颜色表示了 closed-form solution 闭合解 learning rate事先定好的数值 在lin…