• 03、MongoDB -- MongoDB 权限的设计


    MongoDB 权限的设计

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

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

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


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

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

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

    在这里插入图片描述


    2、启动 mongodb 的客户端

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

    mongo mongodb://192.168.0.107:27017
    
    • 1

    即可启动 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
    
    • 1

    然后创建一个数据【hahaha】
    在这里插入图片描述

    在【hahaha】数据库添加一个用户叫 AAA,然后这个用户对这个数据库有读写的权限
    userAdmin:允许对指定数据库执行用户管理的权限,比如创建、删除和修改用户

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

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

    在这里插入图片描述

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

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

    如图,登录成功,还能执行查看用户的操作,说明登录成功没问题。
    因为 【AAA】这个用户是保存在【hahaha】这个数据库中的,说明当用户登录时,必须在保存该用户的数据库中才能登录。
    在这里插入图片描述


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

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

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

    在这里插入图片描述

    【注意】此时的【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

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

    在这里插入图片描述


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

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

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


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

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

    如图: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" }]
     });
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

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

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

    如图:在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" }]
     });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    在这里插入图片描述

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

    在这里插入图片描述

  • 相关阅读:
    详细介绍Unlink的原理及分析
    “因此在此系统上禁止运行脚本” 解决方案
    项目实战——Web自动化测试
    WAN-LAN以及一些计算机网络概念
    Pytorch使用torch.utils.data.random_split拆分数据集,拆分后的数据集状况
    MySQL3
    机器学习笔记之配分函数(二)——随机最大似然
    OpenCV官方教程中文版 —— 图像梯度
    软件开发模型与软件测试模型
    根据先序遍历和中序遍历生成后序遍历
  • 原文地址:https://blog.csdn.net/weixin_44411039/article/details/136416854