03、MongoDB -- MongoDB 权限的设计

目录

MongoDB 权限的设计

演示前准备:启动 mongodb 服务器 和 客户端 :

本次演示,只需要启动一个 单机模式的 mongodb 服务器 和 一个 mongodb 的客户端,

1、启动单机模式的 mongodb 服务器

打开命令行窗口,执行如下命令即可启动 MongoDB 服务器了

mongod.exe --config "E:\install\mongodb\mongodb-4.2.25\mongod.conf"

就是只启动一个 mongodb 的服务器

2、启动 mongodb 的客户端

启动 mongodb 的客户端,指定要连接的 mongodb 服务器的端口号:

mongo mongodb://192.168.0.107:27017

即可启动 mongodb 的客户端

启动成功,如图:

之所以只需要输入 mongo 就能启动 mongodb 的客户端,是因为我之前把 mongodb 的 bin 目录添加到 path 环境变量里面 。

MongoDB 权限的设计

1、MongoDB 的每个数据库都可以保存用户,不止admin数据库可以保存用户。

这一点和传统数据库只能使用系统数据库来保存用户是截然不同的。

2、保存用户的数据库和该用户有权限操作的数据库完全可以是不同的。

比如 ljh 这个用户保存在 【admin】这个数据库里面,但是创建 ljh 这个用户的时候,只给这个用户操作【springboot】这个数据库的权限。

所以虽然 ljh 这个用户是在【admin】 这个数据库创建的,当时确没有操作【admin】数据库的权限。

3、当用户登录时,必须在保存该用户的数据库中才能登录。

比如我登录到 admin 这个数据库

mongo mongodb://192.168.0.107:27017/admin -u admin -p 123456

然后创建一个数据【hahaha】

在【hahaha】数据库添加一个用户叫 AAA,然后这个用户对这个数据库有读写的权限

userAdmin:允许对指定数据库执行用户管理的权限,比如创建、删除和修改用户

db.createUser({ user: "AAA",pwd: "123456",roles: [
    { role: "readWrite", db: "hahaha" },
    { role: "userAdmin", db: "hahaha" }]
 });

重点来了:这个用户是创建在【hahaha】这个数据库里面的。

演示用户登录时,先演示登录到保存该用户的数据中

mongo mongodb://192.168.0.107:27017/hahaha -u AAA -p 123456

如图,登录成功,还能执行查看用户的操作,说明登录成功没问题。

因为 【AAA】这个用户是保存在【hahaha】这个数据库中的,说明当用户登录时,必须在保存该用户的数据库中才能登录。

AAA 用户是保存在【hahaha】数据库的,现在看能不能登录到 admin 数据库

mongo mongodb://192.168.0.107:27017/admin -u AAA -p 123456

如图:登录失败,这就说明了当用户登录时,必须在保存该用户的数据库中才能登录。

【注意】此时的【hahaha】数据库只是添加了 【AAA】这个用户,还不算是真正创建出这个数据库来,

所以给这个数据库添加一条数据,【hahaha】数据库才算是真正创建出来。

4、该用户登录之后,能否操作哪个数据库,才能看出来该用户对哪些数据库有操作权限。

【切记:】 用户保存在哪个数据库中,用户初始登录时就必须连接该数据库------只有连接该数据库才能验证用户。

这个在第3点也说了,就是 【AAA】这个用户,是保存在【hahaha】这个数据库里面的,所以在初始登录的时候,【AAA】这个用户只有指定是登录【hahaha】这个数据库,才能登录成功,授权成功。

这里再演示一遍:

登录mongodb时,【admin -u admin -p 123456】这个指定【登录的数据库、账号和密码】,就是初始登录时连接的数据

mongo mongodb://192.168.0.107:27017/admin -u admin -p 123456

1、登录的是admin用户,登录的数据库是保存admin用户的【admin】数据库,所以admin这个用户可以正常使用命令查看数据库

2、登录的是 AAA 用户,AAA用户是保存在【hahaha】数据库里面的,但是此时的初始登录,连接的是admin 数据库

mongo mongodb://192.168.0.107:27017/admin -u AAA -p 123456

如图:AAA用户在初始登录时,验证授权没通过,因为用户保存在哪个数据库中,用户初始登录时就必须连接该数据库------只有连接该数据库才能验证用户

3、登录的是 AAA 用户,AAA用户是保存在【hahaha】数据库里面的,此时的初始登录,连接的就是【hahaha】数据库

mongo mongodb://192.168.0.107:27017/hahaha -u AAA -p 123456

如图:AAA用户登录之后,能操作到【hahaha】数据库这个数据库,报名这个用户有操作这个数据库的权限。

但是如图,它只能查看到 【hahaha】这个数据库,也表明它只对这个数据库有操作权限。

注意:因为 AAA 用户只有操作 【hahaha】 数据库的权限,所以查看命令也只能查看到自己有权限操作的数据库。

admin 之所以能查看所有数据库,是因为在之前设置时,把它设置成管理员。

5、在MongoDB中创建一个数据库之后,应该在该数据库中创建自己存储的用户,否则就无法在初始连接时仅通过该数据库建立连接

如图:根据3、4点的解释,来说明:登录的是 AAA 用户,AAA用户是保存在【hahaha】数据库里面的,但是此时的初始登录,连接的是admin 数据库,所以就无法在初始连接时与该数据库建立连接。

演示:

说明:如果你希望程序可以一开始就能连接你所创建的数据库,

  1. 你应该在该数据库中创建自己的用户。

  2. 且要让该用户有操作本数据库的权限------否则你只能登录,登录之后根本就无法访问该数据库。

    【通常:】 通常保存用户的数据库,跟用户有权限操作的数据库还是应该相同,这样才更符合逻辑。

1、创建一个springboot的数据库

2、在springboot中创建一个用户,且要让该用户有操作本数据库的权限

(这个用户只有读写的权限)

账号:LJHCCC

密码:123456

db.createUser({ user: "LJHCCC",pwd: "123456",roles: [
    { role: "readWrite", db: "springboot" },
    { role: "userAdmin", db: "springboot" }]
 });

在启动一个命令行窗口,登录这个数据库

mongo mongodb://192.168.0.107:27017/springboot -u LJHCCC -p 123456

如图:在MongoDB中创建一个数据库(springboot)之后,在该数据库中创建自己存储的用户(LJHCCC),就可以在初始连接时通过该数据库建立连接

因为 LJHCCC 这个用户只能操作 springboot 这个数据库,

所以查看有哪些数据库时,也只能查到有他操作权限的那个数据库

演示创建一个数据库,然后添加一个用户,这个数据库还是没有被真正创建出来,只有往该数据库插入数据,才能算是正在创建出该数据库。

账号:LJHAAA

密码:123456

db.createUser({ user: "LJHAAA",pwd: "123456",roles: [
    { role: "readWrite", db: "local" },
    { role: "userAdmin", db: "local" },
    { role: "readWrite", db: "springboot" },
    { role: "userAdmin", db: "springboot" }]
 });

添加一条数据的命令:db.test.insert({"aaa":1})

相关推荐
凡人的AI工具箱1 分钟前
每天40分玩转Django:实操图片分享社区
数据库·人工智能·后端·python·django
CT随7 分钟前
MongoDB
数据库·mongodb
Fool丶玄浅41 分钟前
【数据库系统概论】—— 关系数据库
数据库·数据库系统
DashVector1 小时前
如何通过HTTP API检索Doc
数据库·人工智能·http·阿里云·数据库开发·向量检索
SEO-狼术2 小时前
Enhance Security in Software Crack
数据库
计算机毕设定制辅导-无忧学长2 小时前
Redis 初相识:开启缓存世界大门
数据库·redis·缓存
Rverdoser3 小时前
redis延迟队列
数据库·redis·缓存
weisian1513 小时前
Redis篇--常见问题篇6--缓存一致性1(Mysql和Redis缓存一致,更新数据库删除缓存策略)
数据库·redis·缓存
中草药z4 小时前
【Spring】深入解析 Spring 原理:Bean 的多方面剖析(源码阅读)
java·数据库·spring boot·spring·bean·源码阅读
地球资源数据云4 小时前
全国30米分辨率逐年植被覆盖度(FVC)数据集
大数据·运维·服务器·数据库·均值算法