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})

在这里插入图片描述

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_L_J_H_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值