整理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.mzph.cn/news/114467.shtml

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

相关文章

kubernetes(2)

pod管理 应用部署 上传测试镜像 [rootk8s1 docker]# docker push reg.westos.org/library/myapp:v1 [rootk8s1 docker]# docker push reg.westos.org/library/myapp:v2创建自助式pod(生产不推荐) [rootk8s2 ~]# kubectl run demo --imagemyapp:v1[ro…

Kotlin泛型:灵活的类型参数化

在Kotlin中,泛型是一项强大的特性,它允许我们编写可重用、类型安全且灵活的代码。通过泛型,我们可以将类型参数化,使得我们的代码可以适用于不同类型的数据,同时保持类型安全性。本篇博客将介绍Kotlin中的泛型类、泛型…

uniapp 安装 u-view 组件库

u-view 组件库安装教程:https://uviewui.com/components/install.html 注:以下使用 HBuilderx 安装 u-view 2.0 版本,不适用于其它版本。 1.安装 u-view 组件库 2、注册并登录 HBuilderx 账号,点击下载 u-view 组件库。 3、点击…

如何开发一个 Safari 插件

本文字数:2493字 预计阅读时间:15分钟 由于常用浏览器是Safari,而Safari浏览器的插件比不上Chrome,所以就有了自己开发常用的Safari插件的想法。 打算开发当前页面生成二维码的Extension,因为网络原因,AirD…

vue 大文件切片下载

前提是你上传的时候也是切片上传,下载的时候后端给你返回的是一个文件id的数组,如果是你就可以用下面的方法 // 循环下载文件 // id是每个文件的id type 是一个类型,我传入是应为给不同的组件赋值getFile(id, type) {// 通过wen文件id去获取…

Boosting Bagging Stacking Mapping 区别

Boosting: Boosting 是一种集成学习技术,其中多个机器学习模型(通常是决策树)被顺序训练。每个后续模型都关注先前模型所犯的错误,对错误分类的数据点给予更多权重。这样,Boosting 就会结合这些弱模型的预测…

真实感受:是智能家居在选择合适的技术!

科技从来都是为了让我们的生活更加的简单、舒适,而智能家居的智能,体现在如何更更更方便的使用我需要控制的家居。 例如:下班躺在床上想休息,房间和大厅的灯还开着,这时你会选择什么产品躺着解决问题? 红外…

Hadoop3教程(二十八):(生产调优篇)NN、DN的多目录配置及磁盘间数据均衡

文章目录 (148)NN多目录配置(149)DataNode多目录配置及磁盘间数据平衡磁盘间数据均衡 参考文献 (148)NN多目录配置 NN多目录的意思是,本地目录可以配置成多个,且每个目录存放内容相…

20款VS Code实用插件推荐

前言: VS Code是一个轻量级但功能强大的源代码编辑器,轻量级指的是下载下来的VS Code其实就是一个简单的编辑器,强大指的是支持多种语言的环境插件拓展,也正是因为这种支持插件式安装环境开发让VS Code成为了开发语言工具中的霸主…

【数据结构】八大排序

目录 1. 排序的概念及其作用 1.1 排序的概念 1.2 排序运用 1.3 常见的排序算法 2. 常见排序算法的实现 2.1 插入排序 2.1.1 基本思想 2.1.2 直接插入排序 2.1.3 希尔排序(缩小增量排序) 2.2 选择排序 2.2.1 基本思想 2.2.2 直接选择排序 2.2…

Linux下Samba服务安装及启用全攻略

Linux下Samba服务安装及启用全攻略 前言一、安装SSH Server二、安装Samba Server1.安装net-tool2.建立账号的samba3.windows通过Samba与linux共享文件4.使用远程工具登录Linux 总结 前言 提示:本文详解了在Linux系统下如何安装和启用Samba服务,涵盖了从…

【2023年11月第四版教材】软考高项极限冲刺篇笔记(2)

1 我们要知道的事 1、考试的选择题不会出假大空的管理,一般较为具体 2.3 信息系统治理 首先治理的目标是什么 治理的管理层分为三层 原则:简单透明适合 COBIT IT审计范围:总体、组织、物理、逻辑、其他 IT审计风险:固有、控制、检查、总体审计 IT审计方法:访谈、调查、…

【微服务 SpringCloudAlibaba】实用篇 · Nacos注册中心

微服务(5) 文章目录 微服务(5)1. 认识和安装Nacos2. 服务注册到nacos和拉取服务1)引入依赖2)配置nacos地址3)重启 3. 服务分级存储模型3.1 给user-service配置集群3.2 同集群优先的负载均衡 4. …

在Mac上安装配置svn

版本控制系统对于程序员来说是至关重要的工具,而Subversion(简称svn)就是一种流行的版本控制系统。本文将指导你在Mac上安装并配置svn,让你更好地管理代码版本。 安装svn 首先,我们需要从Subversion官方网站下载适合…

vue el-dialog弹出框自定义指令实现拖拽改变位置-宽度-高度

前言 在实际开发中我们经常使用el-dialog弹出框做表单,一般情况都是居中。遮挡到了一部分数据 当我们想要查看弹出框下面的数据时,就只能先把弹出框关闭,查看完数据之后在打开弹框 我们通过动态样式,和鼠标事件就可以实现。但自…

AWK语言第二版 第3章.探索性数据分析 3.1泰坦尼克号的沉没

这章也是第一版没有,第二版新增的。 3. 探索性数据分析 上一章给出了一些个人使用的小脚本,通常是特制或专用的。在本章中,我们还会展示Awk在现实中的典型使用场景:使用Awk和其他工具来非正式地探索一些真实的数据,目…

3D双目跟踪瞳孔识别

人眼数据集通常用于眼部相关的计算机视觉、眼动追踪、瞳孔检测、情感识别以及生物特征识别等领域的研究和开发。以下是一些常见的人眼数据集: BioID Face Database: 这个数据库包含1,521张近距离的人脸图像,其中包括瞳孔位置的标记。它通常用于瞳孔检测和…

Linux 中断

CPU自动完成 GIC驱动 Linux内核 用户编写的中断服务程序 request_irq() free_irq() typedef irqreturn_t (*irq_handler_t)(int, void *) enable_irq() disable_irq() local_irq_enable() local_irq_restore() local_irq_disable() local_irq_save() 上半部//顶半…

effective c++学习笔记(后四章)

六 继承与面向对象设计 红色字 \color{FF0000}{红色字} 红色字 32 确定你的public继承塑模出 is-a关系 如果你令class D (“Derived”)以public形式继承class B (“Base”),你便是告诉C编译器(以及你的代码读者)说,每一个类型为…

Origami Studio for Mac:塑造未来,掌握原型设计之巅

在当今高度竞争的设计领域,原型设计的重要性不言而喻。它不仅是沟通想法,也是测试和改进设计的关键环节。而现在,一款强大的原型设计工具——Origami Studio for Mac,正在席卷设计界,以其独特的功能和卓越的性能&#…