目录
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