MoongoDB安全(用户权限)十一

流程:

  1. 创建超级管理员
  2. 修改配置文件,验证身份登录
  3. 重启服务
  4. 使用超级管理员登录
  5. 创建普通用户
  6. 使用普通用户登录对应的数据库

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

猜你喜欢

转载自blog.csdn.net/weixin_43113679/article/details/93241904