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

 

目录

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