MongoDB权限机制

明确需求

我们在DOS窗口直接输入命令就可以登录数据库

这在实战工作中绝对不允许

思考:如何解决

回答:使用权限机制,开启验证模式即可

语法

创建账号

1
2
3
4
5
6
7
8
db.createUser({
"user":"账号",
"pwd":"密码",
"roles":[{
role:"角色",
db:"所属数据库"
}]
})

角色

1
2
3
4
5
6
7
8
9
10
11
12
13
#角色种类
超级用户角色:root
数据库用户角色:read,readWrite
数据库管理角色:dbAdmin,userAdmin
集群管理角色:clusterAdmin、clusterManager、clusterMontitor、hostManager;
备份恢复角色:backup、restore;
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase

#角色说明
root:只在admin数据库中可用。超级账号,超级权限
read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除、查看统计或访问system.profile

开启验证模式

概念

指用户需要输入账号密码才能登录使用

操作步骤

1
2
3
4
1.添加超级管理员
2.退出卸载服务
3.重新安装需要输入账号密码的服务(注在原安装命令基础上加上--auth即可)
4.启动服务 -> 登录测试
步骤1:添加超级管理员
1
2
3
4
5
6
7
8
9
10
11
mongo
use admin

db.createUser({
"user":"admin",
"pwd":"admin888",
"roles":[{
role:"root",
db:"admin"
}]
})

注意:2.x 3.x 4.x前面版本默认是看不到admin ,直接选中即可

步骤2:退出卸载服务
1
2
bin\mongod --remove
注意:DOS窗口必须用管理员身份运行

image-20210617171249950

步骤3:安装需要身份验证的MongoDB服务
1
bin\mongod --install --dpath 数据存放目录 --logpath log目录 --auth

image-20210617174056197

步骤4:启动服务->登录测试

image-20210617174242195

通过超级管理员账号登录

  • 语法:mongo 服务器ip地址:端口/数据库 -u 用户名 -p 密码

  • 语法2:a-先登录,b-选择数据库,c-输入db.auth(用户名,密码)

image-20210617174848439

练习

  • 需求

    • 添加用户shop1可以读shop数据库
    • 添加用户shop2可以读写shop数据库
    • 注意:必须在对应数据库创建用户
  • 准备:创建测试数据和测试用户(注意:选择shop仓库创建用户)

    1
    2
    3
    4
    use shop
    for(var i=1;i<=10;i++){
    db.goods.insert({"name":"goodsName"+i,"price":i});
    }
  • 添加用户并设置权限

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    //切记
    use shop

    //shop1
    db.createUser({
    "user":"shop1",
    "pwd":"admin888",
    "roles":[{
    role:"read",
    db:"shop"
    }]
    })
    //shop2
    db.createUser({
    "user":"shop2",
    "pwd":"admin888",
    "roles":[{
    role:"readWrite",
    db:"shop"
    }]
    })
  • 验证:shop1可读

    image-20210617180024518

  • 验证:shop2可读可写

    image-20210617180237677


MongoDB权限机制
https://blog-theta-ten.vercel.app/2021/06/21/MongoDB权限机制/
作者
Chen
发布于
2021年6月21日
许可协议