■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窗口必须用管理员省份运行
步骤3:安装需要身份验证的MongoDB服务
bin\mongod --install --dbpath E:\mongodb\data --logpath E:\mongodb\logs\mongodb2.log --auth
步骤4:启动服务 -> 登录测试
通过超级管理员账号登陆
- 方法1:mongo 服务器IP地址:端口/数据库 -u 用户名 -p 密码
- 方法2:a-先登录,b-选择数据库,c-输入db.auth(用户名,密码)
练习
- 需求
添加用户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可读
- 验证:shop2验证可读可写