• 02、MongoDB -- 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 的安全配置

    在默认情况下,MongoDB 并不需要安全认证即可直接进入,就像前面配置副本集时,直接使用 mongo.exe(客户端)即可连接 mongodb 服务器。

    这样明显不安全,接下来给 mongodb 搞个安全配置–创建用户及权限名、启用Mongodb安全控制、mongodb 权限的设计


    启动演示用到的 mongodb 服务器 和 客户端

    接下来的演示:启动单机模式的mongodb服务器和客户端服务器就可以了


    启动单机模式的 mongodb 服务器:
    mongod.exe --config "E:\install\mongodb\mongodb-4.2.25\mongod.conf"
    
    • 1

    在这里插入图片描述


    启动 mongodb 的客户端

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

    mongo mongodb://192.168.0.107:27017
    
    • 1

    在这里插入图片描述

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



    MongoDB 操作数据库命令

    在介绍配置用户之前,先介绍 MongoDB 操作数据库的命令:

    show databases:查看当前节点的所有数据库(和MySQL相同)

    show users: 查看当前数据库中的用户

    db:查看当前连接的数据库。
    有可能当前所在的数据库其实根本不存在。

    use 数据库名:切换 或 创建 数据库(和MySQL相似)。

    对 mongodb 来说,如果切换的数据库不存在,该命令就会自动创建数据库,这意味着你永远不会切换失败;

    但是,只有当新数据库中插入文档之后才会真正创建该数据库。

    从此处可以看到,在MongoDB,你通常并不需要显式创建数据库。

    db.dropDatabase():删除数据库。无需指定数据库名,该命令总是删除当前连接的数据库。

    db.dropUser(“用户名”): 删除指定用户


    上面的命令大概就是这个逻辑:

    在这里插入图片描述


    MongoDB 的帮助系统

    什么是MongoDB的帮助系统?

    在这里插入图片描述

    除了show、use 等特殊命令之外,其他命令要么是 rs.* 开头的,要么是 db.* 开头的,

    这是因为MongoDB命令系统采用了“面向对象”的设计方式,它认为:

    1、所有与副本集有关的命令都相当于rs对象的方法,

    2、所有与数据库有关的命令都相当于db对象的方法。

    这样设计的好处就是可以非常方便使用这些命令的帮助系统。

    比如想知道db对象包含哪些方法(命令),只要输入db.help()。


    如图:这些 rs.help() 、 db.help() 这种命令, 可以在命令行窗口查看有哪些命令方法可用的【命令行帮助】,就是 mongodb 的帮助系统

    如图:输入 db.help() :查看当前连接的数据库包含哪些方法(命令)

    上面有关 db 开头的命令,在如下图片都可以找到。

    在这里插入图片描述

    输入 rs.help() 查看副本集有哪些命令可用。
    在这里插入图片描述


    一些解释:

    rs 对象:代表副本集,

    副本集是一种用于提供数据冗余和高可用性的数据库部署方式。
    副本集包含多个MongoDB实例(节点),其中一个是主节点(primary),其余的是从节点(secondary)。
    副本集为应用程序提供了数据冗余和故障恢复能力,同时还允许读操作(查询)可以在多个节点上进行。
    
    • 1
    • 2
    • 3

    db 对象:代表当前所连接的数据库


    之前测试过的这些命令:

    这些命令是操作副本集的,所以是 rs 开头的:

    rs.initiate(rs_conf):在 mongodb 客户端初始化副本集

    rs.conf() :查看副本集的配置。

    rs.status() :查看副本集的状态,可看到副本集内谁是主节点,谁是副节点,谁是仲裁节点等详细信息。

    rs.slaveOk(boolean) :该命令设置副节点上是否可查看数据

    这些命令是操作 db 对象的,所以是 db 开头的:

    db.isMaster() :查看当前连接是否为主节点。


    在 客户端 创建用户:

    现在要在 admin 数据库里面添加两个用户:超级管理员 root 和 管理员 admin
    账号:root;密码:123456
    账号:admin:密码:123456


    通过 MongoDB 客户端执行如下命令:

    1、切换到 admin 数据库

    这个命令,表示切换到 admin 这个数据库,这样的话,后面创建的用户将会保存在 admin 数据库中

    use admin  
    
    • 1

    在这里插入图片描述


    2、创建管理员 admin

    这条命令就是创建一个 admin 用户,且该用户保存 admin 数据库中。基本上它是一个 管理员。
    ( 数据库叫 admin ,我这里创建一个叫 admin 的用户,并不会有任何冲突,创建的用户名按个人喜好即可)

    db.createUser({ user: "admin",pwd: "123456",roles: [
        { role: "readWriteAnyDatabase", db: "admin" },
        { role: "userAdminAnyDatabase", db: "admin" },
        { role: "dbAdminAnyDatabase", db: "admin" }]
     });
    
    • 1
    • 2
    • 3
    • 4
    • 5

    上面命令的解释:

    roles 是个数组,里面的 role 就是具体的权限。

    如 :role: readWriteAnyDatabase 表示有读写任意数据库的权限,
    db: “admin” 表示: 【role这个读写任意数据库的权限】只对 【admin】 这个数据库生效

    admin 这个数据库,是 mongodb 的一个管理级的一个特殊的数据库,是有特殊意义的,所以【readWriteAnyDatabase 】 这个权限在名义上只对【admin】这个数据库起作用,
    但是实际上,【admin 】数据库里面拥有【readWriteAnyDatabase 】这个权限的 【admin】 这个用户,对任意数据库都具有读写的功能,不会只局限在【admin】 这个数据里面。

    注意点:也只有【admin】这个数据库,才能有【readWriteAnyDatabase 】这个操作任意数据库的权限,如果是我自己创建的一个数据库,是无法为用户设置【readWriteAnyDatabase 】这种类型的权限的,会报错该数据库没有这个权限的用户。

    在这里插入图片描述


    3、创建超级管理员 root

    这条命令就是创建一个 root 用户,且该用户保存 admin 数据库中。基本上它是一个 超级管理员。
    (root 这个权限也只能放在 admin 这种特殊的数据库里面才能生效)
    (root 是最高权限,可以做任何事情)

    db.createUser({ user: "root",pwd: "123456",roles: [
        { role: "root", db: "admin" }]
     });
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    4、再创建两个普通的用户 LJHAAA 和 LJHBBB

    账号: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

    在这里插入图片描述


    账号:LJHBBB
    密码:123456

    db.createUser({ user: "LJHBBB",pwd: "123456",roles: [
        { role: "readWriteAnyDatabase", db: "admin" },
        { role: "userAdmin", db: "local" },
        { role: "readWrite", db: "springboot" }]
     });
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述


    5、删除用户演示

    再添加 LJHCCC 这个用户,然后演示删除。

    db.createUser({ user: "LJHCCC",pwd: "123456",roles: [
        { role: "readWriteAnyDatabase", db: "admin" },
        { role: "userAdmin", db: "local" },
        { role: "readWrite", db: "springboot" }]
     });
    
    • 1
    • 2
    • 3
    • 4
    • 5

    添加后可以输入:show users 查看有哪些用户

    可以看到 LJHCCC 这个用户已经创建成功

    在这里插入图片描述


    db.dropUser(“LJHCCC”): 删除指定用户

    true 表示删除 LJHCCC 这个用户成功,再用 show users 命令查看已经没有这个用户存在了

    在这里插入图片描述


    MongoDB 所支持的权限

    read:允许读取指定数据库中数据的权限。

    readWrite:允许读、写指定数据库中数据的权限。

    dbAdmin:允许对指定数据库中执行管理函数的权限,如索引创建、删除,查看统计或访问 system.profile。

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

    clusterAdmin:只对admin数据库可用,授予用户所有分片和副本集相关函数的管理权限。表明分配该权限时,后面的db属性值只能是admin。

    readAnyDatabase:只对admin数据库可用,授予用户对所有数据库的read权限。

    readWriteAnyDatabase:只对admin数据库可用,授予用户对所有数据库的readWrite权限。

    userAdminAnyDatabase:只对admin数据库可用,授予用户对所有数据库的userAdmin权限。

    dbAdminAnyDatabase:只对admin数据库可用,授予用户对所有数据库的dbAdmin权限。

    root:只对admin数据库可用。超级账号,超级权限。


    启动 MongoDB 安全控制


    1、修改 mongod.conf 配置文件

    先停止 mongodb 的客户端,然后修改 mongod.conf 文件,

    在该文件后面增加如下配置:

    # 启用安全控制
    security:
      authorization: enabled
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    再次启动 mongodb 的客户端,这样 MongoDB 的 用户和安全控制 都配置完成了。


    2、重启 mongodb 客户端

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

    mongo mongodb://192.168.0.107:27017
    
    • 1

    在这里插入图片描述

    简而言之:就是先修改配置文件:增加 security 的设置;然后重启客户端即可。


    3、用户登录 mongodb 演示

    【切记】: 当你登录 MongoDB 时,你必须要先进入保存了登录用户的数据库。
    (就是我们上面创建的用户都是保存在 admin 这个数据库里面的,所以需要先进去到 admin 这个数据库,然后再进行用户登录验证)

    如图:刚登录 mongodb 时,连接的数据库是test,需要切换到 admin 数据库,才能登录成功,因为创建的用户都是保存在 admin 数据库的。

    在这里插入图片描述




    好奇为什么这个 mongodb 服务器不用重启,而只是 客户端 需要重启。

    在这里插入图片描述




  • 相关阅读:
    动态规划-线性DP问题总结(一)
    架构师成长之路也该了解的新一代微服务技术-ServiceMesh(上)
    【图书管理系统】附源码+教程
    【NVMe2.0b 14-6】Format NVM、Keep Alive、Lockdown command
    springboot集成hystrix和feign,解决fallback,fallbackFactory不生效问题
    进入docker容器内部使用命令行工具
    ABP.Next系列02 项目下载 运行 -Fstyle
    networkx绘制度分布
    Java.lang.Class类 isArray()方法有什么功能呢?
    垃圾收集算法
  • 原文地址:https://blog.csdn.net/weixin_44411039/article/details/136407438