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

news/2024/10/23 7:37:57/

 

目录

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.ppmy.cn/news/752191.html

相关文章

详解 inner join with another 'dataframe' df1.join(df2, $df1Key === $df2Key)

ex&#xff1a;df.join(ds,df("name")ds("name") and df("age")ds("age"),"outer").show();其中&#xff1a;(1)“ds”是关联的dataframe;(2)"df("name")ds("name") and df("age")ds(&q…

按一定条件筛选df1,返回结果中df1的索引取df2的数据

每日一题&#xff1a; df1,df2已知&#xff0c;按一定条件筛选df1&#xff0c;返回结果中df1的索引取df2的数据&#xff1f; df1 pd.DataFrame(np.random.random(50).reshape(25,2)) df2 pd.DataFrame(np.random.randint(100,size50).reshape(25,2)) 解决&#xff1a; df2…

2个dataframe,df1的每一列分别乘以df2的某一列

Notes:df1的每一列分别乘以df2的某一列&#xff0c;得一列一列如&#xff1a;df1.loc[:,0]*df2.loc[:,1 ] # df1 *df2.loc[:,1 ]&#xff0c;会导致df1每一列的全部值&#xff0c;乘以df2某一列里按顺序的单一数字for temp_port in col_list_port: # 股票成本df_port_stock_cos…

创建df的副本df2,其中df2为除了df最后一列之外的所有列;

可以使用 df.iloc[:, :-1] 来获取除了df的最后一列之外的所有列,然后将其赋值给新的变量df2即可创建df的副本df2。 例如: import pandas as pd# 创建一个示例数据 df = pd.DataFrame({col1: [1, 2, 3], col2: [4, 5, 6], col3: [7, 8, 9]})# 创建df的副本df2 df2 = df.iloc[:…

python在循环中创建dataframe(如df1、df2……)

需要循环读取文件夹中的csv&#xff0c;创建dataframe 使用exec函数 rootPath"" excelNames os.listdir(rootPath) for i in range(len(excelNames)):csvpathrootPath"\\"excelNames[i] exec(df{0} pd.read_csv(csvpath).format(i))

df2=df 改变会影响另一个 互相独立的办法

df2df df2.loc[:,"id"]35 #随后发现df也被改变了import copya [1, 2, 3] b a # 把下面2行注释并运行会发现a&#xff0c;b改变数据后会影响彼此 b copy.deepcopy(a) #避免办法1&#xff1a;深拷贝&#xff0c;让b与a相互独立(值相同&#xff0c;但在内存中的ID不同…

Python pd.merge()函数介绍(全)

目录 1.前言 2.参数介绍 参数如下&#xff1a; 3.基础案例 3.1on关键字演示 3.2left_on 和 right_on 关键字 3.3left_index 和 right_index 关键字 3.4数据连接的类型 3.4.1 1.前言 在数据合并操作中&#xff0c;有两个操作函数pd.caoncat()和pd.merge() &#xff0…

DataFrame结构Python练习题以及答案

项目一&#xff1a; 1.写出以下代码的输出结果&#xff1a; 代码如下&#xff1a; 2.写出以下代码的输出结果。 代码如下&#xff1a; 根据df创建透视表&#xff1a; import pandas as pd import numpy as np df pd.DataFrame({"Item":[Item0, Item0, Item1, …