一、基本原理
MongoDB中,每个数据库的实例都可拥有任意多个用户。安全检查开启后,只有通过身份验证的用户才能够进行数据的读写操作。
admin(管理员)和local(本地)是两个特殊的数据库,它们当中的用户可对任何数据库进行操作。这两个数据库中的用户可被看作是超级用户。经认证后,管理员用户可对任何数据库进行读写,同时能夠执行某些只有管理员才能执行的命令,如listDatabases和shutdown。
二、角色权限
- 数据库用户角色:read、readWrite;
- 数据库管理角色:dbAdmin、dbOwner、userAdmin;
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
- 备份恢复角色:backup、restore;
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色:root
三、admin库与root用户
mongosh localhost/admin -u root -p
// MongoDB 6.0以上使用mongosh,以下使用mongo命令
我这里用docker安装Mongodb时已经配置了admin库和和admin库下的root用户,如果安装时没有配置的话直接输入mongosh
mongosh
> use admin
switched to db admin
db.createUser({user:'root',pwd:'123456','roles':['root']})
// 用户root,密码为abcd
四、创建库与添加用户
db.createUser({user:'test_user',pwd:'123456','roles':['readWrite']})
// 读写角色权限
五、读写权限
db.createUser({user:'test_read',pwd:'123456','roles':['read']})
// 只读角色权限
db.auth('test_read','123456')
// 登录test_read用户
db.createCollection('student')
// 创建一个student集合,提示无权限
db.articles.insert({'author':'Peter','name':'Java'})
// 往一个已存在的集合中插入数据,提示无写权限
六、身份验证
切换到test库,没登录状态
show tables
// 提示需要先登录
进行登录身份验证后,执行成功
db.auth('test_user','123456')
// 登录test_user用户
往期推荐:
MongoDB系列之索引
MongoDB系列之聚合操作
MongoDB系列之详细查询
MongoDB系列之数量统计、排序、分页
如果你对我的创作感兴趣并且你能学到有用的技术,请点关注,点关注不迷路,你要是觉得文章写得可以的话,请点赞、分享加收藏,谢谢~