MongoDB【Springboot访问MongoDB、MongoDB安全认证、MongoDB内置角色 】(五)-全面详解(学习总结---从入门到深化)

news2024/10/7 12:21:46

 

目录

Springboot访问MongoDB

MongoDB安全认证

MongoDB内置角色 


 

Springboot访问MongoDB

 MongoTemplate方式

引入依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-mongodb</artifactId>
  <version>2.6.8</version>
</dependency>

配置文件application.properties

spring.data.mongodb.host=192.168.139.132
spring.data.mongodb.port=27017
spring.data.mongodb.database=mydb

DAO 实现类注入MongoTemplate 完成增删改查

@Autowired
protected MongoTemplate mongoTemplate;

MongoRepository 的方式

引入依赖,同MongoTemplate方式

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-mongodb</artifactId>
  <version>2.6.8</version>
</dependency>

配置文件application.properties,同MongoTemplate方式

spring.data.mongodb.host=192.168.139.132
spring.data.mongodb.port=27017
spring.data.mongodb.database=mydb

编写 Repository接口继承MongoRepository

public interface OrdersRepository extends MongoRepository<Orders, String> {
  List<Orders> findOrderByName(String name);
}

1.Springboot使用MongoDB采用哪种方式

A 注入MongoTemplate

B 编写接口继承MongoRepository

C 以上都是

MongoDB安全认证

 安全认证概述

MongoDB 默认是没有账号的,可以直接连接,无须身份验证。实 际项目中肯定是要权限验证的,否则后果不堪设想。从2016年开始 发生了多起MongoDB黑客赎金事件,大部分MongoDB安全问题暴 露出的短板其实是用户的安全意识不足,首先用户对于数据库的安 全不重视,其次用户在使用过程中可能没有养成定期备份的好习惯,最后是企业可能缺乏有经验和技术的专业人员。所以对 MongoDB进行安全认证是必须要做的。

 用户管理和安全认证

以auth方式启动MongoDB

docker run -itd --name mongo5 -p 27017:27017 mongo:xxx --auth

备份数据

mongodump -h 127.0.0.1:27017 -d mydb -o /usr/local

恢复数据(在用户认证之后)

mongorestore -h localhost -u root -p 123456 -- db mydb /dump/mydb --authenticationDatabase admin

进入容器内的mongo终端,切换到admin库添加用户,修改密码, 验证用户以及删除用户

用户相关操作

用于创建 MongoDB 登录用户以及分配权限的方法

use admin;
db.createUser(
{
     user: "账号",
     pwd: "密码",
     roles: [
     { role: "角色", db: "安全认证的数据库" },
     { role: "角色", db: "安全认证的数据库" }
     ]
 }
)

user:创建的用户名称,如 admin、root 、zhangsan

pwd:用户登录的密码

roles:为用户分配的角色,不同的角色拥有不同的权限,参数是数组,可以同时设置多个 role:角色,MongoDB 已经约定好的角色,不同的角色对应不同 的权限 后面会对role做详细解释

db:数据库实例名称,如 MongoDB 默认自带的有 admin、 local、config、test 等,即为哪个数据库实例设置用户

 例如:

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

修改密码

db.changeUserPassword( 'root' , '123456' );

添加角色

db.grantRolesToUser('用户名',[{ role:'角色名', db:'数据库名'}])

验证用户

db.auth("账号","密码"),返回 1 说明认证成功

删除用户

db.dropUser("用户名")

1.MongoDB认证用户命令是

A db.createUser('username','password')

B db.auth('username','password')

C db.grantRolesToUser('username,[{ role:'rolename', db:'database'}])

D 以上都不对

 

MongoDB内置角色 

各个类型用户对应的角色

 

 1.MongoDB内置角色不包括哪个?

A backup

B restore 

C root

D admin

 基于角色的访问控制

创建管理员

MongoDB 服务端开启安全检查之前,至少需要有一个管理员账号,admin 数据库中的用户都被视为管理员如果 admin 库没有任 何用户的话,即使在其他数据库中创建了用户,启用身份验证,默 认的连接方式依然会有超级权限,即仍然可以不验证账号密码照样 能进行 CRUD,安全认证相当于无效。

>use admin
switched to db admin
> db
admin
> db.createUser(
... {
... user:"root",
... pwd:"123456",
... roles:[{role:"root",db:"admin"}]
... })

创建普通用户

创建 mydb数据库并创建两个用户,zhangsan 拥有读写权限, lisi 拥有只读权限测试这两个账户的权限。以超级管理员登录测 试权限。

> use mydb
switched to db mydb
> db.c1.insert({name:"testdb1"})
WriteResult({ "nInserted" : 1 })
> db.c2.insert({name:"testdb1"})
WriteResult({ "nInserted" : 1 })
> show tables
c1
c2
> db.c1.find()
{ "_id" : ObjectId("62a00e5c1eb2c6ab85dd5eec"),"name" : "testdb1" }
> db.c1.find({})
{ "_id" : ObjectId("62a00e5c1eb2c6ab85dd5eec"),"name" : "testdb1" }
> show dbs
admin      0.000GB
config     0.000GB
local      0.000GB
mydb       0.001GB
>

 如下图所示,为 mydb数据库创建了两个用户,zhangsan 拥有读写 权限,lisi 拥有只读权限,密码都是 123456。

use mydb
switched to db mydb
> db
mydb
> db.createUser({
... user:"zhangsan",
... pwd:"123456",
... roles:[{role:"readWrite",db:"mydb"}]
... })
> db.createUser({
... user:"lisi",
... pwd:"123456",
... roles:[{role:"read",db:"mydb"}]
... })

以普通用户登录验证权限

普通用户现在仍然像以前一样进行登录,如下所示直接登录进入 mydb数据库中,登录是成功的,只是登录后日志少了很多东西, 而且执行 show dbs 命令,以及 show tables 等命令都是失败的, 即使没有被安全认证的数据库,用户同样操作不了,这都是因为权限不足,一句话:用户只能在自己权限范围内的数据库中进行操作。

> db.auth("zhangsan","123456")
1
> show dbs
mydb 0.001GB
> show tables
c1
c2

以管理员登录验证权限

客户端管理员以root用户登录,安全认证通过后,拥有对所有数据库的所有权限

> use admin
switched to db admin
> db.auth("root","123456")
1
> show dbs
...

1.以安全认证方式运行MongoDB下列说法错误的是?

A 需要在admin库中添加用户

B 需要在mongod.conf配置文件中设置auth=true

C 如果是docker启动需要在docker run命令后添加参数--auth

D 必须在admin库中创建root角色用户

2.MongoDB查看所有创建的用户命令是?

A db.getUsers()

B db.findAllUsers()

C db.system.uses.find().pretty()

D use admin

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

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

相关文章

【裸机开发】SPI 通信接口(一)—— SPI 通信流程及四种工作模式

目录 一、SPI 简介 二、SPI 的基本通信流程 三、SPI 的四种工作模式 1、极性和相位 2、四种工作模式 一、SPI 简介 SPI 采用主从的方式工作&#xff0c;可以一个主设备对应一个从设备&#xff0c;也可以一个主设备对应多个从设备。虽然是一个主设备对多个从设备的关系&am…

如何建立一套完整的人事管理制度?

一、什么是人事管理制度 人事管理制度是企业为有效管理和运营人力资源而建立的一系列规章制度、流程和政策。它是人力资源管理的基础&#xff0c;旨在确保企业拥有合适的员工队伍&#xff0c;并通过有效的管理和激励机制&#xff0c;使员工能够充分发挥自己的潜力&#xff0c;…

计算机网络 day2 物理层-数据链路层-帧-MAC地址 交换机的工作原理

目录 物理层&#xff08;physical layer&#xff09; 数据链路层&#xff08;Data link layer&#xff09; MAC地址&#xff1a; 网络地址&#xff1a; 帧的格式&#xff1a; MTU&#xff1a;最大传输单元 max transfer unit 1500 &#xff08;ip add可以查看&#xf…

【动态规划算法练习】day16

文章目录 一、完全背包1.题目简介2.解题思路3.代码4.运行结果 二、322. 零钱兑换1.题目简介2.解题思路3.代码4.运行结果 三、518. 零钱兑换 II1.题目简介2.解题思路3.代码4.运行结果 四、279. 完全平方数1.题目简介2.解题思路3.代码4.运行结果 总结 一、完全背包 1.题目简介 …

【百日冲大厂】第二十篇,牛客网选择题+编程题 字符串反转+公共子串计算(dp问题)

前言&#xff1a; 大家好&#xff0c;我是良辰丫&#xff0c;第二十篇,牛客网选择题编程题 字符串反转公共子串计算(dp问题).&#x1f49e;&#x1f49e;&#x1f49e;生活就像一只盲盒&#xff0c;藏着意想不到的辛苦&#xff0c;当然也有万般惊喜的可能。不管是次次都如愿以偿…

初学者一步步学习python 学习提纲

当学习Python时&#xff0c;可以按照以下提纲逐步学习&#xff1a; 入门基础 了解Python的历史和应用领域安装Python解释器和开发环境&#xff08;如Anaconda、IDLE等&#xff09;学习使用Python的交互式解释器或集成开发环境&#xff08;IDE&#xff09;进行简单的代码编写和…

浅谈C++下观察者模式的实现

为什么要有观察者模式 想象一个场景&#xff0c;有一只猫和一群老鼠&#xff0c;当猫出现的时候&#xff0c;每一只老鼠都要逃跑 用最简单的方法实现一个去模拟这一个过程 #include<iostream>class Mouse_1 {public:void CatCome(){std::cout<<"Mouse_1 Ru…

【MyBatis-Plus】DQL编程控制

1&#xff0c;DQL编程控制 增删改查四个操作中&#xff0c;查询是非常重要的也是非常复杂的操作&#xff0c;这块需要我们重点学习下&#xff0c;这节我们主要学习的内容有: 条件查询方式查询投影查询条件设定字段映射与表名映射 1. 条件查询 1. 条件查询的类 MyBatisPlus…

PHP 训练成绩管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 训练成绩管理系统 是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为PHP APACHE&#xff0c;数据库 为mysql5.0&#xff0c;使用php语言开发。 …

css设计表格圆角最简单的方法

代码如下&#xff1a; table {width: 100%;/* border-collapse: collapse; */background-color: #FBFBFB; /* 背景颜色; */border-collapse: separate; /* 让border-radius有效 */border-spacing: 0; /*表格中每个格边距设为0*/border: 1px solid #DFDFDF;/*边框*/border-radi…

软件测试面试简历,三年测试项目经验怎么写?

作为三年左右的测试工程师&#xff0c;简历上有五六个项目经历很正常&#xff0c;那如何设计这几个项目&#xff0c;其实设计好三两个就行&#xff0c;面试官能关注到的也只有最新的三两个&#xff0c;两年前的项目也没有关注的必要啦&#xff0c;所以在这两三个项目中一定要体…

mysql8.0 navicat mysql 2059报错

进入mysql安装目录&#xff1a; 输入用户名密码连接mysql 设置密码 刷新 测试连接&#xff0c;连接成功

如何保障业务稳定性?一文详解蚂蚁业务智能可观测平台BOS

随着业务规模的不断扩大以及AI、云计算、大数据等技术的不断发展&#xff0c;大量的企业希望利用上云来加速其数字化转型&#xff0c;全面提升可靠性、安全性和灵活性&#xff0c;并且降低运营成本。 不过对于大多数企业来说&#xff0c;全面上云是一项颇具难度的挑战。这里面…

阿里图标库中图标的下载使用

一 iconfont-阿里巴巴矢量图标库 进去找到你想要的图标 二 点这个 三 点这个 点这个 新建自己的项目 选择这个点下载 解压出来&#xff0c;除了两个demo不要都添加到你的代码中的文件夹保存 四 main.js中全局导入 import ./xxxx/xxxx/iconfont.css 五 页面使用 <…

2 数据类型

数据类型分为基本数据类型和引用数据类型。 基本数据类型有&#xff1a;byte、int、short、long、float、double、char、boolean。占用多少字节&#xff0c;如下表所示。1个字节是8位。

Java面试题【3】

Java面试题——简答题部分 文章目录 Java面试题——简答题部分1.列举几个常用的集合类并指出特点2.Set里的元素是不能重复的&#xff0c;那么用什么方法来区分重复与否呢&#xff0c;是还是equals()&#xff0c;有何区别&#xff1f;3.请描述线程的生命状态&#xff0c;并描述s…

简单分享下怎么创建一个微信小程序

怎么创建一个微信小程序?三招教你这样做!!微信小程序不会做没关系,看我这篇文章就够啦!!实现0基础到大神的瞬间飞跃不是梦!! 戳下方链接即可直达官网&#xff0c;上千种行业精美模板任君挑选&#xff0c;快一起来试试吧&#xff01;让小程序制作不再困难&#xff01;上千个行业…

吉瑞外买项目

目录 1、软件开发整体介绍 软件开发流程 角色分工 软件环境 2、瑞奇外卖项目介绍 项目介绍 产品原型展示 技术选型 功能架构 角色 3、环境搭建 数据库环境搭建 maven项目搭建 4、后台登录功能开发 需求分析 代码开发 5、后台退出功能开发 第一天 1、软件开发整…

ModaHub魔搭社区:腾讯云定义AI Native向量数据库

大模型时代的到来&#xff0c;拥抱大模型成为企业的刚需。 向量数据库通过把数据向量化然后进行存储和查询&#xff0c;可以极大地提升效率和降低成本。它能解决大模型预训练成本高、没有“长期记忆”、知识更新不足、提示词工程复杂等问题&#xff0c;突破大模型在时间和空间…

12.2 ARM处理器概论

目录 ARM处理器概述 ARM公司概述 ARM的含义 ARM公司 ARM产品系列 早先经典处理器 Cortex-A系列 Cortex-R系列 Cortex-M系列 RISC处理器 RISC处理器&#xff08;精简指令集处理器&#xff09; CISC处理器&#xff08;复杂指令集处理器&#xff09; ARM指令集概述 …