MongoDB 权限管理

文章目录

    • 前言
    • 1. 权限控制
      • 1.1 MongoDB 默认角色
        • 1.1.1 读写角色
        • 1.1.2 管理角色
        • 1.1.3 其他角色
        • 1.1.4 超级用户角色
      • 1.2 用户管理
        • 1.2.1 查看用户
        • 1.2.2 创建新用户
        • 1.2.3 调整角色
        • 1.2.4 删除用户
        • 1.2.4 修改密码

前言

上一篇 《MongoDB 单机安装部署》 文章中,为 MongoDB 配置了授权功能,当时只介绍了创建一个高权限账户,没有详细介绍 MongoDB 的权限相关的内容,本篇文章将详细 MongoDB 的权限控制。

1. 权限控制

MongoDB 权限控制是基于角色划分的,角色是一部分权限的组合。在创建用户时,需要指定用户所属的角色,一个用户可拥有多种角色,每个角色又可以包含多种权限。MongoDB 提供了多种默认角色,当然也支持用户自定义角色。

1.1 MongoDB 默认角色

刚才提到 MongoDB 可以自定义角色,也为用户提供了部分默认角色。关于默认角色,不同的角色类型,它的作用范围也不一样,例如 readWrite 角色,它的作用范围就是一个特定的数据库。

1.1.1 读写角色

读写权限的作用域是特定的数据库,默认角色又 read 和 readWrite 两种:

  • read:表示用户针对数据库中所有非系统集合具有 “读” 操作权限。
  • readWrite:表示用户针对数据中所有非系统集合具有 “读/写” 操作权限。

授权案例,为 test 库创建一个 test_user 用户,具有只读权限。

use test;
db.createUser({user: "test_user", pwd: "1234", roles: [{role: "read", db: "test"}]});

进行登陆测试。

mongo -utest_user -p1234 --authenticationDatabase test

请添加图片描述

1.1.2 管理角色

MongoDB 提供以下默认的数据库管理角色:

  • dbAdmin:该角色可以管理数据库中的集合与索引,具有创建和删除的权限,但不能为数据库创建新角色和用户,也不能管理其他角色。
  • userAdmin:该角色可以管理数据库中的其他用户和角色,可以进行授权或者回收权限。
  • dbOwner:该角色可以管理数据库中的所有集合和索引,也可以管理数据库中的用户和权限,相当于是 readWrite、dbAdmin、userAdmin 三种角色的组合权限。
1.1.3 其他角色

前面介绍的角色,都作用于特定的数据库,接下来介绍的角色,可以作用于所有的数据库(local 与 config 数据库除外)进行管理和操作。

针对所有数据库(可以理解为所有由用户创建的数据库)进行管理操作的权限如下:

  • readAnyDatabase:该角色可以对所有数据库进行读操作,相当于是 read 角色的全局范围角色。
  • readWriteAnyDatabase:该角色可以对所有数据库进行读写操作,相当于是 readWrite 角色的全局范围角色。
  • dbAdminAnyDatabase:该角色可以管理所有数据库中的集合和索引,相当于是 dbAdmin 角色的全局范围角色。
  • userAdminAnyDatabase:该角色可以管理所有数据库中的角色和用户的权限,相当于是 userAdmin 角色的全局范围角色。

授权案例,创建一个全局只读的角色。

use admin;
db.createUser({user: "test_admin1", pwd: "1234", roles: [{role: "readAnyDatabase", db: "admin"}]});

使用全局的角色时 db 需要填写为 admin 负责会创建失败。

1.1.4 超级用户角色

MongoDB 默认提供了一个 root 超级用户角色,当为一个用户分配 root 角色后,该用户将同时拥有刚才介绍的所有角色的权限,另外还有 clussterAdmin、restore、backup 的角色权限。

root 角色,创建示例:

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

1.2 用户管理

本小节介绍如何对 MongoDB 中的用户进行管理,例如创建、删除、修改密码等。

1.2.1 查看用户

查看数据库中所有的用户,可以使用如下命令:

db.getUsers();
1.2.2 创建新用户

授权案例,为 test 库创建一个 test_user 用户,具有只读权限。

use test;
db.createUser({user: "test_user", pwd: "1234", roles: [{role: "read", db: "test"}]});
1.2.3 调整角色

通过执行如下命令,可以修改用户的角色。

db.grantRolesToUser()

例如,将刚才创建的 test_user 只有 read 角色,无法查看用户相关的信息:

myReplSet:PRIMARY> db.getUsers();
2024-02-20T16:08:50.236+0800 E  QUERY [js] uncaught exception: Error: not authorized on test to execute command { usersInfo: 1.0, lsid: { id: UUID("3cd3d4c7-cc42-447d-b782-b2773b7193c2") }, $clusterTime: { 

使用高权限账户,为其添加一个 userAdmin 角色:

db.grantRolesToUser( "test_user", [{role: "userAdmin", db: "test"}])

再次使用 test_user 查看用户相关信息,没有报错:

>>> mongo -utest_user -p1234 --authenticationDatabase test
MongoDB shell version v4.2.25myReplSet:PRIMARY> db.getUsers()
[{"_id" : "test.test_admin","userId" : UUID("753e07d3-7f32-4f69-b53a-10a0d33d0d02"),"user" : "test_admin","db" : "test","roles" : [{"role" : "dbAdmin","db" : "test"}],"mechanisms" : ["SCRAM-SHA-1","SCRAM-SHA-256"]}
]
1.2.4 删除用户

删除单个用户的语法如下:

db.dropUser("username")

删除一个 db 下,所有的用户:

use test;
db.dropAllUsers();
1.2.4 修改密码

例如,将 user123 用户密码修改为 112233 的语法如下:

db.updateUser("user123",{pwd: '112233'}
)

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

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

相关文章

【HarmonyOS应用开发】三方库(二十)

三方库的基本使用 一、如何获取三方库 目前提供了两种途径获取开源三方库: 通过访问Gitee网站开源社区获取 在Gitee中,搜索OpenHarmony-TPC仓库,在tpc_resource中对三方库进行了资源汇总,可以供开发者参考。 通过OpenHarmony三…

自然语言编程系列(二):自然语言处理(NLP)、编程语言处理(PPL)和GitHub Copilot X

编程语言处理的核心是计算机如何理解和执行预定义的人工语言(编程语言),而自然语言处理则是研究如何使计算机理解并生成非正式、多样化的自然语言。GPT-4.0作为自然语言处理技术的最新迭代,其编程语言处理能力相较于前代模型有了显…

QEMU源码全解析 —— virtio(20)

接前一篇文章: 上回书重点解析了virtio_pci_modern_probe函数。再来回顾一下其中相关的数据结构: struct virtio_pci_device struct virtio_pci_device的定义在Linux内核源码/drivers/virtio/virtio_pci_common.h中,如下: /* O…

智慧驿站_智慧文旅驿站_轻松的驿站智慧公厕_5G智慧公厕驿站_5G模块化智慧公厕

多功能城市智慧驿站是在智慧城市建设背景下,所涌现的一种创新型社会配套设施。其中,智慧公厕作为城市智慧驿站的重要功能基础,具备社会配套不可缺少的特点,所以在应用场景上,拥有广泛的需求和要求。那么,城…

springcloud-网关(gateway)

springcloud-网关(gateway) 概述 \Spring Cloud Gateway旨在提供一种简单而有效的方式来路由到API,并为其提供跨领域的关注,如:安全、监控/指标和容错 常用术语 Route(路由): 网关的基本构件。它由一个ID、一个目的地…

【ArcGIS微课1000例】0103:导出点、线、面要素的折点坐标值

点要素对应的是一个或者若干个坐标,线要素对应的是对个坐标值对应的点连起来,面要素是多个坐标值对应的点连起来构成的封闭多边形。本文讲述导出点的坐标值。 文章目录 一、点要素坐标导出1. 计算点坐标2. 导出点坐标二、线要素坐标导出1. 生成线要素折点2. 计算折点坐标3. 导…

【打工日常】使用docker部署Dashdot工具箱

一、Dashdot介绍 dashdot是一个简洁清晰的服务器数据仪表板,基于React实现 ,主要是显示操作系统、进程、存储、内存、网络这五个的数据。 二、本次实践介绍 1. 本次实践简介 本次实践部署环境为个人测试环境 2. 本地环境规划 本次实践环境规划&#xf…

S-35390A开发

计时芯片 S-35390A芯片是计时芯片,一般用来计算时间。低功耗,宽电压,受温度影响小,适用于很多电路。它有一个问题,不阻止用户设置不存在的时间,设置进去之后计时或者闹钟定时会出错。 规格书阅读 首先我…

成为大佬之路--linux软件安装使用第000000003篇--vmare安装centos

准备工作 1.下载centos安装包 2.安装vmare 建议直接百度 绿色版 直接上最新版本旗舰版(pro) 新建虚拟机 1.打开vamre,点击文件--新建虚拟机 2.直接默认选择 "典型",点击下一步 3. 选择稍后安装操作系统,点击下一步 4.选择linux版本 因为安装的是centos直接选…

Arcmap excel转shp

使用excel表格转shp的时候,如果你的excel里面有很多字段,直接转很大概率会出现转换结果错误的情况,那么就需要精简一下字段的个数。将原来的表格文件另存一份,在另存为的文件中只保留关键的经度、纬度、和用于匹配的字段即可&…

【C++】C++11下线程库

C11下线程库 1. thread类的简单介绍2.线程函数参数3.原子性操作库(atomic)4.mutex的种类5. RAII风格加锁解锁5.1Lock_guard5.2unique_lock 6.condition_variable 1. thread类的简单介绍 在C11之前,涉及到多线程问题,都是和平台相关的,比如wi…

代码随想录第二十一天 701.二叉搜索树中的插入操作 108.将有序数组转换为二叉搜索树

701.二叉搜索树中的插入操作 题目描述 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。 注意&a…

pom.xml常见依赖及其作用

1.org.mybatis.spring.boot下的mybatis-spring-boot-starter:这个依赖是mybatis和springboot的集成库,简化了springboot项目中使用mybatis进行持久化操作的配置和管理 2.org.projectlombok下的lombok:常用注解Data、NoArgsConstructor、AllA…

ArcGIS学习(八)基于GIS平台的控规编制办法

ArcGIS学习(八)基于GIS平台的控规编制办法 上一任务我们学习了”如何进行图片数据的矢量化?" 这一关我们来学习一个比较简单的案例一一”如何在ArcGIS中录入控规指标,绘制控规图纸?" 首先,先来看看这个案例的分析思路以及导入CAD格式的控规图纸。 接着,来看…

使用静态CRLSP配置MPLS TE隧道

正文共:1591 字 13 图,预估阅读时间:4 分钟 静态CRLSP(Constraint-based Routed Label Switched Paths,基于约束路由的LSP)是指在报文经过的每一跳设备上(包括Ingress、Transit和Egress&#xf…

如何邀请媒体参加活动报道?媒体邀约的几大步骤?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 邀请媒体参加活动报道通常需要发送邀请函、提供详细活动信息,并通过电话或邮件进行跟进确认。 在邀请媒体之前,应该制定一个详细的媒体规划表,包括拟…

Unity2023.1.19_ShaderGraph节点说明以及使用技巧

Unity2023.1.19_ShaderGraph节点说明以及使用技巧 目录 Unity2023.1.19_ShaderGraph节点说明以及使用技巧 1. 快捷键CtrlG完成和UE蓝图使用快捷键C一样的蓝图分组注释效果: 2. Tiling And Offset: 3. 以下是两组URP材质渲染的效果对比: 4…

探索JDK8的新特性

1. JDK8简介 1.1 简述 Java 8由Oracle从2014年3月18日发布,此版本是自Java 5(发布于2004年)之后的一个重量级版本,也是java发展史上的一个里程碑式的版本。这个版本在JVM、编译器、库、Java语法特性等方面都做了很大改进&#x…

k8s除了可以直接运行docker镜像之外,还可以运行什么? springboot项目打包成的压缩包可以直接运行在docker容器中吗?

Kubernetes(k8s)主要设计用于自动部署、扩展和管理容器化应用程序。虽然它与Docker容器最为密切相关,Kubernetes实际上是与容器运行时技术无关的,这意味着它不仅仅能够管理Docker容器。Kubernetes支持多种容器运行时,包…

NestJS入门6:日志中间件

前文参考: NestJS入门1 NestJS入门2:创建模块 NestJS入门3:不同请求方式前后端写法 NestJS入门4:MySQL typeorm 增删改查 NestJS入门5:加入Swagger 1. 安装 nest g middleware logger middleware​ ​ ​ 2. lo…