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.mzph.cn/news/692561.shtml

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

相关文章

STL常用之vector,list,stack,queue,deque总结与对比

一,vector 1)底层 vector的底层是开辟出来的一块连续空间,类似于数组,每次空间满了之后会根据不同的编译器有不同的扩容倍数。 2)优劣 优点:随机访问效率高,因为地址是连续的,底层…

Linux 驱动开发基础知识——APP 怎么读取按键值(十二)

个人名片: 🦁作者简介:学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:Vir2021GKBS 🐼本文由…

前端简单知识复习

1.symbol类型 Symbol 是 ECMAScript 6 中引入的一种新的基本数据类型,它表示独一无二的值。Symbol 值是通过 Symbol() 函数创建的。 Symbol 值具有以下特点: 独一无二性(唯一性):每个通过 Symbol() 函数创建的 Symb…

基于RBAC的权限管理的理论实现和权限管理的实现

权限管理的理论 首先需要两个页面支持,分别是角色管理和员工管理,其中角色管理对应的是角色和权限的配合,员工管理则是将登录的员工账号和员工所处的角色进行对应,即通过新增角色这个概念,让权限和员工并不直接关联&a…

Error creating bean with name ‘formContentFilter‘ defined in class path

问题描述 运行之前能正常的项目出现以上报错,提示创建“formContentFilter”时错误;org.springframework.boot版本2.4.8 org.springframework.beans.factory.BeanCreationException. Message: Error creating bean with name formContentFilter define…

202428读书笔记|《风吹哪页读哪页》——答案在路上,自由在风里,身处井隅,心向璀璨

202428读书笔记|《风吹哪页读哪页》——答案在路上,自由在风里,身处井隅,心向璀璨 文前篇章一 三餐四季篇章二 山水一程篇章三 心之安处篇章四 通关时刻篇章五 瞬间长大 《风吹哪页读哪页》飞扬文室编著,有很多非常经典又惊艳的句…

4款AI写作软件推荐,让文章撰写更加轻松! #学习方法#知识分享

国外ChatGPT爆火,AI写作在国内也引起不小的瞩目,目前国内的AI写作工具少说也有几十上百个,要在这么多AI写作中找出适合自己的工具,一个一个尝试是不太现实的,所以今天就给大家推荐一些款AI写作工具。帮助你少走弯路&am…

【洛谷题解】P1051 [NOIP2005 提高组] 谁拿了最多奖学金

题目链接:[NOIP2005 提高组] 谁拿了最多奖学金 - 洛谷 题目难度:普及- 涉及知识点:判断条件,累加 题意: 分析:直接统计,判断条件,输出即可(水) AC代码&am…

Stable Diffusion 绘画入门教程(webui)

文章目录 一、前言二、做出的效果三、SD使用流程1、大模型2、关键字3、调参数 一、前言 随着mj和sd绘画软件发布之后,AI绘画开始爆火,很多小伙伴已经挖掘出很多的玩法,哪怕最基础的AI美女、AI壁纸、真人漫改等等都赚的盆满钵满,当…

【Flink】FlinkSQL读取hive数据(批量)

一、简介: Hive在整个数仓中扮演了非常重要的一环,我们可以使用FlinkSQL实现对hive数据的读取,方便后续的操作,本次例子为Flink1.13.6版本 二、依赖jar包准备: 官网地址如下: Overview | Apache Flink 1、我们需要准备相关的jar包到Flink安装目录的lib目录下,我们需…

NC文件不规则裁剪(利用shp文件裁剪)(三)

文章目录 前言实例数据代码部分需要的库加载文件写入地理信息裁剪NC结果 完整代码奉上 前言 Hello大家好呀,最近正好需要用到多个SHP去裁剪NC,按照我以前的两种办法(办法1和办法2)操作的话,我自己都会破防&#xff0c…

Halcon中打开摄像机

(带货广告:需要该套测试设备或者工业相机的及其相关产品的,请私聊我) 1、相机说明 使用Basler相机, 2、打开Halcon助手 3、检测相机 4、连接摄像机和采集画面 5、自动生成代码 生成代码后,保存工程到本…

FreeRtos任务调度

一.创建任务函数 xTaskCreate( (TaskFunction_t )start_task, /*要执行的函数,开始任务*/(const char* )"start_task", /*任务名字,建议个函数名一样*/(uint16_t )START_STK_SIZE, (void* …

【PX4-AutoPilot教程-TIPS】PX4控制无人机在Gazebo中飞行时由于视角跟随无人机在画面中心导致视角乱晃的解决方法

PX4控制无人机在Gazebo中飞行时由于视角跟随无人机在画面中心导致视角乱晃的解决方法 问题描述解决方法 问题描述 无人机在Gazebo中飞行时,无人机始终处于画面中央,会带着视角乱晃,在Gazebo中进行任何操作视角都无法固定。 观察Gazebo左侧Wo…

最全软件测试面试问题和回答,全文背熟不拿下offer算我输!

求职,类似于打仗,是一场挑战自己的战斗,也是一场跟用人单位的博弈,更是一场千人过独木桥的厮杀、混战。《孙子谋攻篇》中早就说了:"知己知彼,百战不殆;不知彼而知己,一胜一负&a…

Mac M2芯片配置PHP环境

Mac M2芯片配置PHP环境 1. XAMPP2. PHPBrew(PHP版本管理)安装php7.4.33版本 3. 直接使用homebrew 安装php环境参考 1. XAMPP 官网地址 https://www.apachefriends.org/ 安装 安装完成 web server打开后,在打开localhost 成功! 2. PHPBrew(PHP版本管…

单片机01天_stm32f407zg_创建新工程

创建“寄存器版工程” 1、创建工程文件夹 创建工程文件夹“Project”,内部包含文件夹“CMSIS”&&“USER”。 CMSIS:Cortex系列内核接口驱动文件。 USER:存放用户编写的程序文件。 “USER”文件夹内包含“Inc”&&“Src”…

陶陶摘苹果C++

题目&#xff1a; 代码&#xff1a; #include<iostream> using namespace std; int main(){//一、分析问题//已知&#xff1a;10 个苹果到地面的高度a[10],陶陶把手伸直的时候能够达到的最大高度height//未知&#xff1a;陶陶能够摘到的苹果的数目sum。//关系&#xff…

《Solidity 简易速速上手小册》第2章:搭建 Solidity 开发环境(2024 最新版)

文章目录 2.1 安装和配置 Solidity2.1.1 基础知识解析安装 Solidity 编译器配置开发环境熟悉命令行工具 2.1.2 重点案例&#xff1a;配置本地开发环境案例 Demo&#xff1a;配置本地 Solidity 环境案例代码&#xff1a;HelloWorld.sol 2.1.3 拓展案例 1&#xff1a;设置 Remix …

【MySQL】Navicat/SQLyog连接Ubuntu中的数据库(MySQL)

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、安装…