■MongoDB权限机制

明确需求

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

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

思考:如何解决

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

语法(略难

创建账号

db.createUser({ 
    "user" : "账号",
    "pwd": "密码",
    "roles" : [{ 
        role: "角色", 
        db: "所属数据库"
    }] 
})

角色

#角色种类
超级用户角色:root 
数据库用户角色:read、readWrite; 
数据库管理角色:dbAdmin、userAdmin; 
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager; 
备份恢复角色:backup、restore; 
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase 

#角色说明
root:只在admin数据库中可用。超级账号,超级权限;
read:允许用户读取指定数据库;
readWrite:允许用户读写指定数据库; 
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile;
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限; 
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限; 
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户;
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限;
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限; 
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限;

开启验证模式

**开启验证模式概念: ** 名词,指用户需要输入账号密码才能登陆使用

操作步骤

1. 添加超级管理员
2. 退出卸载服务
3. 重新安装需要输入账号密码的服务(注在原安装命令基础上加上--auth即可
4. 启动服务 -> 登陆测试

步骤1:添加超级管理员

mongo

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

脚下留心:2.x 3.x 4.x 前面版本默认是看不到admin没关系 你直接选中即可

步骤2:退出卸载服务

bin\mongod --remove

脚下留心:DOS窗口必须用管理员省份运行

mongodb添加只读用户 mongodb 只读权限_添加用户

步骤3:安装需要身份验证的MongoDB服务

bin\mongod --install --dbpath E:\mongodb\data --logpath E:\mongodb\logs\mongodb2.log --auth

mongodb添加只读用户 mongodb 只读权限_mongodb_02

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

mongodb添加只读用户 mongodb 只读权限_mongodb_03

通过超级管理员账号登陆

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

mongodb添加只读用户 mongodb 只读权限_mongodb添加只读用户_04

mongodb添加只读用户 mongodb 只读权限_数据库_05

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

mongodb添加只读用户 mongodb 只读权限_mongodb添加只读用户_06

练习

  • 需求

添加用户shop1可以读shop数据库
添加用户shop2可以读写shop数据库
脚下留心:必须在对应数据库创建用户

  • 准备:创建测试数据和测试用户(注:选择shop仓库创建用户)
use shop;
for(var i=1; i<=10; i++) {
 db.goods.insert({"name":"goodsName"+i,"price":i});
}
  • 添加用户并设置权限
//切记
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可读

mongodb添加只读用户 mongodb 只读权限_添加用户_07

  • 验证:shop2验证可读可写

mongodb添加只读用户 mongodb 只读权限_mongodb_08