流程:
- 创建超级管理员
- 修改配置文件,验证身份登录
- 重启服务
- 使用超级管理员登录
- 创建普通用户
- 使用普通用户登录对应的数据库
mongoDB中的数据库角色
1、创建超级管理员(指明角色和授予的数据库)
超级管理员只能用于帐号管理,不能进行其他数据库操作,可以通过自己给自己授权实现
> use admin
switched to db admin
> db.createUser({"user":"root",pwd:"123456",roles:[{role:"root",db:"admin"}]})
Successfully added user: {
"user" : "root",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
2、修改配置文件(mongod.cfg)
如果不修改配置文件里的权限验证,那么自己创建的普通用户将可以像超级用户一样可以操作MongoDB里的所有数据库及文档等等,包括创建用户
如果是命令模式启动的话,就在原来的启动参数上,在加上 –auth 即可
c:\> mongod --auth --dbpath "D:\..\MongoDB\Server\4.0\data"
如果是windows service方式运行的话,打开 mongo配置文件mongod.cfg, 在security项下,将authorization设置为enabled, 默认是disabled
security:
authorization: enabled
然后重启service就可以了
记住是重新启动服务
3、登录数据库:(需要制定数据库和密码)
D:\MongoDB\Server\4.0\bin>mongo -u root -p 123456 --authenticationDatabase admin
mongo后面的都是配置参数
authenticationDatabase指定了校验用户账户名和密码的数据库
admin 为进入的数据库,此时是想进admin数据库
3、实际开发中是超级管理员创建一普通账户并给其分配对应的数据库,让普通账户只能进行操作指定的数据库
(1)创建普通用户
用户名:user
密码:123456
权限:读写操作
> db.createUser({user:"user",pwd:"123456",roles:[{role:"readWrite",db:"first"}]})
Successfully added user: {
"user" : "user",
"roles" : [
{
"role" : "readWrite", //权限
"db" : "first"
}
]
}
role(即权限范围),而roles 是权限的数组
(2)登录普通用户
第一种开始登录时验证
mongo -u 账号 -p 密码 --authenticationDatabase first //这种方式是从开始登录验证,最后是它认定的数据库
当然如果普通用户想登陆进它没有权限的数据库会是下面这样
D:\MongoDB\Server\4.0\bin>mongo -u user -p 123456 --authenticationDatabase admin
MongoDB shell version v4.0.10
connecting to: mongodb://127.0.0.1:27017/?authSource=admin&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("52920944-3c6e-44de-9536-5844e8e15f01") }
MongoDB server version: 4.0.10
> show tables //查看当前数据库下的集合
Warning: unable to run listCollections, attempting to approximate collection names by parsing connectionStatus
根本就显示不出来当前数据库的所有集合,因为你目前在test数据库(默认的)
而显示所有的数据库
> show dbs
first 0.000GB
只显示有权限的,没权限的就隐藏起来了
如果想操作还要use到 指定的数据库才能操作
开始登录直接登录到指定数据库
mongo first -u user -p 123456 --authenticationDatabase admin
这样进去就在first数据库了
第二种是登陆进去后想切换用户
db.auth("账号","密码")
这记住管理员账号(即管理员权限)能切换到普通账号,但是普通账号不能切换管理员账号
权限说明(基于角色的权限控制)
内置角色
数据库用户角色
read: 只读数据权限
readWrite:学些数据权限
数据库管理角色
dbAdmin: 在当前db中执行管理操作的权限
dbOwner: 在当前db中执行任意操作
userADmin: 在当前db中管理user的权限
备份和还原角色
backup
restore
夸库角色
readAnyDatabase: 在所有数据库上都有读取数据的权限
readWriteAnyDatabase: 在所有数据库上都有读写数据的权限
userAdminAnyDatabase: 在所有数据库上都有管理user的权限
dbAdminAnyDatabase: 管理所有数据库的权限
集群管理
clusterAdmin: 管理机器的最高权限
clusterManager: 管理和监控集群的权限
clusterMonitor: 监控集群的权限
hostManager: 管理Server