MongoDB 权限管理

news2025/1/11 10:49:33

文章目录

    • 前言
    • 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.25

myReplSet: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.coloradmin.cn/o/1459881.html

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

相关文章

[SwiftUI]启动页LaunchScreen.storyboard中适配状态栏加安全区域的高度

如下图,我有一个需求。在启动页(LaunchScreen.storyboard)和引导页(GuideView)的黑色背景上,使用了同一张正方形图片。要求从启动页切换到引导页时,这两张相同的图片的过渡要无缝衔接&#xff0…

三防加固平板在房地产行业的应用|亿道三防onerugged

近期,有一款引人注目的解决方案——亿道三防onerugged平板电脑,它以其出色的性能和多功能的设计,为房地产行业带来了全新的应用体验。 首先,亿道三防onerugged平板电脑的NFC功能在小区业主身份验证中发挥着重要作用。传统的身份验…

Spring Boot项目中TaskDecorator的应用实践

一、前言 TaskDecorator是一个执行回调方法的装饰器,主要应用于传递上下文,或者提供任务的监控/统计信息,可以用于处理子线程与主线程间数据传递的问题。 二、开发示例 1.自定义TaskDecorator import org.springframework.core.task.Task…

小程序--模板语法

一、插值{{}}语法 1、内容绑定 <view>{{iptValue}}</view> 2、属性绑定 <switch checked"{{true}}" /> Page({data: {iptValue: 123} }) 二、简易双向数据绑定 model:value&#xff1a;支持双向数据绑定 注&#xff1a;仅input和textarea支持&a…

Linux(五)__系统管理

介绍 通常&#xff0c; Windows 中使用"任务管理器"主要有 3 个目的&#xff1a; 利用"应用程序"和"进程"标签来査看系统中到底运行了哪些程序和进程&#xff1b;利用"性能"和"用户"标签来判断服务器的健康状态&#xff1…

MySQL锁相关总结|悲观锁、乐观锁、读锁、写锁、表锁、行锁、页面锁、间隙锁、临键锁

MySQL锁总体结构 MySQL 的锁上可以分成三类:总体、类型、粒度。 总体上分成两种:乐观锁和悲观锁类型上也是两种:读锁和写锁锁的粒度上可以分成五种:表锁,行锁,页面锁,间隙锁,临键锁下面我们就来详细讲一下这些锁 1. 悲观锁 悲观锁对于数据库中数据的读写持悲观态度,即…

无人机的视频图传技术有哪些?

在操控无人机时&#xff0c;视频图传技术显得尤为关键。通过这项技术&#xff0c;无人机的摄像头所捕捉的画面能实时回传至遥控器&#xff0c;使操作者全面掌握无人机的拍摄情况。同时&#xff0c;无人机图传技术也是衡量无人机性能的重要标准&#xff0c;它关乎飞行距离与时间…

shapely 笔记 voronoi图

Voronoi 图是一种将平面分割成区域的方法&#xff0c;每个区域包含一个输入点&#xff0c;任何在该区域内的点都比其他输入点更接近该区域的输入点 1 基本使用方法 shapely.ops.voronoi_diagram(geom, envelopeNone, tolerance0.0, edgesFalse) 2 参数说明 geom任何几何类型…

算法——数值算法——牛顿迭代法

目录 牛顿迭代法 一、1021: [编程入门]迭代法求平方根 牛顿迭代法 迭代法&#xff08;Iteration&#xff09;是一种通过反复递推计算来逼近解的方法。而牛顿迭代法&#xff08;Newtons method&#xff09;则是一种特定的迭代法&#xff0c;用于求解方程或函数的根、最小值、最…

Word 文档中的图片另存为 .jpg 格式图片

Word 文档中的图片另存为 .jpg 格式图片 1. Office 按钮 -> 另存为2. 筛选过的网页 (*.htm;*.html)3. 查看生成文件夹References 1. Office 按钮 -> 另存为 2. 筛选过的网页 (*.htm;*.html) ​​​ 3. 查看生成文件夹 References [1] Yongqiang Cheng, https://yongq…

WEB APIs (3)

事件对象 事件对象有事件触发时的相关信息&#xff0c;如点击事件中事件对象储存了鼠标点在哪个位置的信息 场景&#xff1a; 用户按下了哪个键&#xff0c;按下回车键可以发布新闻 鼠标点击了哪个元素&#xff0c;从而做哪些操作 参数e为事件对象 常用属性 type 获取当前…

游戏行业洞察:分布式开源爬虫项目在数据采集与分析中的应用案例介绍

前言 我在领导一个为游戏行业巨头提供数据采集服务的项目中&#xff0c;我们面临着实时数据需求和大规模数据处理的挑战。我们构建了一个基于开源分布式爬虫技术的自动化平台&#xff0c;实现了高效、准确的数据采集。通过自然语言处理技术&#xff0c;我们确保了数据的质量和…

Vue封装全局公共方法

有的时候,我们需要在多个组件里调用一个公共方法,这样我们就能将这个方法封装成全局的公共方法。 我们先在src下的assets里新建一个js文件夹,然后建一个common.js的文件,如下图所示: 然后在common.js里写我们的公共方法,比如这里我们写了一个testLink的方法,然后在main…

二叉树OJ题(2)——二叉树的四种遍历

前序 -> 深度优先遍历dfs 层序 -> 广度优先遍历bfs 6 二叉树的前序遍历 OJ链接 思路分析 开辟一个数组&#xff0c;然后把前序遍历树的顺序放入数组即可。 把根的val放入数组第一个元素接着放入左右&#xff08;递归下去&#xff09; 代码实现 int TreeSize(struct Tr…

2.20号qt

1.Qt中的信息调试类 &#xff08;输出类&#xff09; QDebug //1.类似与printf qDebug("%s","hello kittiy"); //2. 类似与cout 默认有换行 比较常用的方式 qDebug() << "你好" ; //1.类似与printf qDebug("%s",&q…

Harmony-UIAbility组件与UI的数据同步

UIAbility组件与UI的数据同步 基于HarmonyOS的应用模型&#xff0c;可以通过以下两种方式来实现UIAbility组件与UI之间的数据同步。 使用EventHub进行数据通信&#xff1a;基于发布订阅模式来实现&#xff0c;事件需要先订阅后发布&#xff0c;订阅者收到消息后进行处理。 使…

ONLYOFFICE 8.0:引领数字化办公新纪元

目录 前言 软件安装 软件启动 软件新版本特性 个人评价 总结 前言 在当今快节奏的数字化世界中&#xff0c;高效的办公软件已成为企业竞争力的关键因素。ONLYOFFICE&#xff0c;作为全球领先的办公解决方案提供商&#xff0c;始终致力于通过技术创新来优化用户体验。如今…

CVE-2016-3088(ActiveMQ任意文件写入漏洞)

漏洞描述 1、漏洞编号&#xff1a;CVE-2016-3088 2、影响版本&#xff1a;Apache ActiveMQ 5.x~5.13.0 在 Apache ActiveMQ 5.12.x~5.13.x 版本中&#xff0c;默认关闭了 fileserver 这个应用&#xff08;不过&#xff0c;可以在conf/jetty.xml 中开启&#xff09;&#xff1b;…

【最优化】一维搜索

首先我们需要先明确一下我们的任务是什么&#xff1f; 我们的任务是给定一个未知函数&#xff0c;如何找到它的最小值。 三点二次插值法 给定三个点&#xff0c;拟合一条二次曲线&#xff0c;每次迭代更新&#xff0c;当时停止迭代。 GitHub - ldx-star/Numerical-Optimizati…

在前后端分离项目中如何设置统一返回格式

目录 一、步骤一 二、步骤二 在前后端分离的项目中&#xff0c;为了方便前后端交互&#xff0c;后端往往需要给前端返回固定的数据格式&#xff0c;但不同的实体类返回格式不同&#xff0c;所以在真实开发中&#xff0c;我们将所有API接口设置返回统一的格式。基本上包括的有…